我正在尝试使用 TDD 方法在 Objective C 中编写一个类。该类应该基本上实现这个协议。
@protocol SeasonService <NSObject>
-(t_Season)currentSeason;
@end
t_Season
只是冬季、春季、夏季和秋季的枚举。
假设我有一个实现上述的类,下面的伪代码
@implementation SeasonServiceImpl
- (t_Season)currentSeason
{
// Get Date
int month = [self currentMonth];
// Get Latitude
float latitude = [self currentLatitude];
// work out the season based on month and latitude
// (i.e, Northern or Southern hemisphere)
return season;
}
}
我可以通过使用一个类别来暴露currentMonth
和currentLatitude
方法来测试上面的公共方法,然后使用OCMock进行部分模拟。这至少让我可以测试我的代码实现,以根据日期和位置计算出季节。
但
1) 对我来说,使用类别扩展来有效地将两个私有方法变为公共方法似乎是一种代码味道。2)这不是测试我是否正确获取位置。
那么我将如何编码,以便我可以测试我是否正确获取当前位置?我的意思是,这里最好的方法是使用不同的指定 init 方法来接受 a 的实例CLLocationManager
。这可能是一个模拟实例,或者当代码在生产中运行时的真实实例?此外,该currentSeason
方法是否应该更改为类似currentSeasonForDate:NSDate
?