我如何单元测试infoDictionary行为

时间:2014-03-04 12:02:29

标签: objective-c unit-testing mocking tdd

让我们说我的SUT(被测系统)需要从属性bundleIdentifier中的@"CFBundleIdentifier"提供infoDictionary

- (void)testAppPackageName
{
    //fixture code is happening in setUp function
    XCTAssertEqualObjects(sut.bundleIdentifier, [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleIdentifier"]);
}

问题是[[NSBundle mainBundle] infoDictionary]在测试环境中返回一个空的NSDictionary,这意味着我在这里测试的nil等于nil。 此外,这个测试闻起来

你会如何测试?

1 个答案:

答案 0 :(得分:0)

我现在使用的解决方案是在构造函数

中将inforDictionary注入我的sut
- (void)testAppPackageName
{
   //fixture
   NSDictionary* appInfo = @{  @"CFBundleIdentifier" :  BUNDLE_IDENTIFIER};
   sut = [[SomeClass alloc] initWithInfo:appInfo];

   XCTAssertEqualObjects(sut.bundleIdentifier, BUNDLE_IDENTIFIER);
}