【问题标题】:Unit testing of Object对象的单元测试
【发布时间】:2015-01-15 00:58:19
【问题描述】:

我是目标 c 的学习者,并且开始进行单元测试,

我想在对象下面进行单元测试

@interface Media : NSObject{

}
@property (nonatomic, readonly) NSString *name;
@property (nonatomic, readonly) NSString *sex;
@property (nonatomic, readonly) NSString *Description;

- (instancetype)initWithDictionary:(NSDictionary *)mediaData;

@end

#import "Media.h"

@interface Media()

@property (nonatomic, strong) NSString *name;
@property (nonatomic, strong) NSString *sex;
@property (nonatomic, strong) NSString *Description;

@end

@implementation Media

- (instancetype)initWithDictionary:(NSDictionary *)mediaData
{
    self = [super init];
    if (self)
    {
        _name; = mediaData[Name];//getting from Json
        _sex = mediaData[Sex];
        _description = mediaData[Description];
    }
    return self;
}
@end

我的测试课

#import <UIKit/UIKit.h>
#import <XCTest/XCTest.h>
#import "Media.h"

@interface ModelUnitTest : XCTestCase

@end

@implementation ModelUnitTest

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

- (void)tearDown {
    // Put teardown code here. This method is called after the invocation of each test method in the class.
    [super tearDown];
}

- (void)testModelObject:(id)file
{
    XCTAssertNotNil(file);
    XCTAssertTrue(file isKindOfClass:[Media class]]);
    Media * fileObj = (Media *)file;
    XCTAssertNotNil(fileObj.name);
    XCTAssertNotNil(fileObj.sex);
    XCTAssertNotNil(fileObj.description);
}

但是,这个测试永远不会运行 我知道我在这里犯了一些错误我错过了一些东西但无法弄清楚在这种情况下谁能帮助我

【问题讨论】:

  • NSString *描述;不是一个好习惯。看起来它指的是一个类而不是一个类的实例。
  • 我在我的代码中更正了它,谢谢

标签: ios xcode unit-testing xctest


【解决方案1】:

Xcode 只会运行方法签名以您拥有的“test”开头的测试,但方法签名也可以没有参数。如果您将方法名称更改为

,测试将运行
- (void)testModelObject
{

}

但这意味着您将不再拥有您的file。您应该在方法中或在 setup 方法中初始化它,如下所示:

@interface ModelUnitTest : XCTestCase
@property (nonatomic, strong) id file;
@end

@implementation ModelUnitTest

- (void)setUp {
[super setUp];
self.file = //setup your file
}

- (void)tearDown {
    // tear down your file if necessary
    [super tearDown];
}

- (void)testModelObject
{
    XCTAssertNotNil(self.file);
    XCTAssertTrue(self.file isKindOfClass:[Media class]]);
    Media * fileObj = (Media *)self.file;
    XCTAssertNotNil(fileObj.name);
    XCTAssertNotNil(fileObj.sex);
    XCTAssertNotNil(fileObj.description);
 }

【讨论】:

  • 你的意思是//设置你的文件
  • 我应该做 self.media = [[PPMedia alloc]init];
  • 没错。您可以在 setup 方法中执行此操作,该方法在每个测试执行之前被调用,也可以在测试本身中执行。如果您需要为多个测试提供相同的初始状态,这实际上只是一种方便的方法来让您的状态做好准备。
猜你喜欢
  • 2017-12-11
  • 2011-09-26
  • 2021-11-06
  • 1970-01-01
  • 1970-01-01
  • 2013-10-16
  • 2011-01-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多