在类扩展中声明的单元测试方法

Posted

技术标签:

【中文标题】在类扩展中声明的单元测试方法【英文标题】:Unit testing methods declared in class extensions 【发布时间】:2015-10-20 11:19:45 【问题描述】:

我对以下事情感到好奇。由于我在类扩展中声明了各种方法,是否可以使用 XCTest 对它们进行单元测试?

例如,给定一个包含方法 foo 的类扩展:

@interface FooClass()

-(NSString*)foo;

@end

如何在测试类中测试 foo:?

非常感谢您的帮助!

【问题讨论】:

【参考方案1】:

您不需要在方法内部进行测试,因为您可能会在流程实现中更频繁地更改它。测试需要来自 *.h 文件,但如果需要,您可以创建测试类别。你也可以使用运行时(例如——performSelector)

RSFooClass.h

#import <Foundation/Foundation.h>


@interface RSFooClass : NSObject
@end

RSFooClass.m

#import "RSFooClass.h"


@implementation RSFooClass

- (NSString *)foo 
    return @"Hello world";


- (NSInteger)sum:(NSInteger)a with:(NSInteger)b 
    return a + b;


@end

RSFooClassTest.m

#import <XCTest/XCTest.h>
#import "RSFooClass.h"


@interface RSFooClass (Testing)

- (NSString *)foo;
- (NSInteger)sum:(NSInteger)a with:(NSInteger)b;

@end


@interface RSFooClassTest : XCTestCase

@property (strong, nonatomic) RSFooClass *foo;

@end


@implementation RSFooClassTest

- (void)setUp 
    [super setUp];
    // Put setup code here. This method is called before the invocation of each test method in the class.

    self.foo = [[RSFooClass alloc] init];


- (void)testFoo 
    NSString *result = [self.foo foo];
    XCTAssertEqualObjects(result, @"Hello world");


- (void)testSumWith 
    NSInteger a = 1;
    NSInteger b = 3;
    NSInteger result = [self.foo sum:a with:b];
    NSInteger expected = a + b;
    XCTAssertEqual(result, expected);


@end

【讨论】:

以上是关于在类扩展中声明的单元测试方法的主要内容,如果未能解决你的问题,请参考以下文章

学习笔记Hibernate 注解 (Y2-1-9)

java 面向对象(十七):单元测试方法

扩展特征的单元测试类 - 我如何在特征中模拟和存根方法?

如何在Typescript中对私有方法进行单元测试

如何在 Typescript 中对私有方法进行单元测试

junit5常用注解