我要检查,如果运行代码单元TESE情况或不结果,如执行不同的代码:检查正在运行的代码单元测试用例或不
if (unit test case is running)
{
do something
}
else
{
do other thing
}
对此有何想法?
我要检查,如果运行代码单元TESE情况或不结果,如执行不同的代码:检查正在运行的代码单元测试用例或不
if (unit test case is running)
{
do something
}
else
{
do other thing
}
对此有何想法?
这是一种糟糕的方法,您应该尝试模拟您正试图通过Mock ojects或其他机制来避免此状态的逻辑部分。
现在你的问题你可以使用一个像isUnittest
这样的设置在测试设置和拆解上的类型变量,如果你喜欢,我不建议你这么做。
请勿直接发送信息UIAlertView
。相反,使用依赖注入,例如财产一样
@property (strong, nonatomic) Class alertViewClass;
那么你的代码来创建一个警报可以做
UIAlertView *alert = [[_alertViewClass alloc] initWithTitle:…etc…];
在你的测试代码,注入不同的类。我使用https://github.com/jonreid/JMRTestTools来指定JMRMockAlertView
。然后,我可以使用JMRMockAlertViewVerifier
来测试警报呼叫。 (实际上,这使得警报的测试驱动开发成为可能。)
另一种方法是让该类具有通过静态方法控制的可自定义行为,并让测试用例在其静态装入方法中调用该方法。
我有一个类似的问题,使用故事板和外部宁静的服务通过oauth进行身份验证。应用程序委托会检查appdelegate中是否存在有效的oauth标记:didFinishLaunchingWithOptions,如果没有,则编程方式触发segue执行oauth登录。但这在测试案例中并不理想。为了解决这个问题,我在应用代理中创建了一个静态方法来禁用登录屏幕。这是我的应用程序委托中的代码:
static Boolean showLoginScreen = TRUE ;
+ (void) disableLoginScreen
{
showLoginScreen = FALSE ;
NSLog(@"disabled login screen") ;
}
测试用例有其负载的方法来做到以下几点:
// disable login screen for the test case
+ (void) load {
NSLog(@"now disabling login screen") ;
[XYZAppDelegate disableLoginScreen];
}
这工作,因为申请被初始化之前测试用例类加载。当然,您必须在应用程序委托中检查此标志的值以触发/不触发登录继续。我尝试但拒绝的其他替代方案如下:
在测试目标上创建一个预处理器定义。但是编译器只用这个标志编译测试用例文件,而不是应用程序源文件。请参阅http://www.innovaptor.com/blog/2013/09/02/xcode-preprocessor-macros-for-test-code.html
使用测试用例的静态初始化方法调用disable方法。在测试用例运行时,应用程序在加载测试用例类之前启动。有关详细信息,请参阅http://www.friday.com/bbum/2009/09/06/iniailize-can-be-executed-multiple-times-load-not-so-much/。
这似乎为我工作(的iOS 8时,Xcode 6):
- (BOOL) isRunningTest {
return NSClassFromString(@"XCTestCase") != nil;
}
我觉得这是比其他答案清洁和更容易。
只有将所有测试用例写入一个类名XCTestCase时,这才是一个好主意。但是我意识到我要实现的目标是一个非常糟糕的主意!感谢您的努力... –
确实,'XCTestCase'是iOS测试框架的一部分,因此无论如何它都可以工作(至少,如果您没有在应用中导入框架,这并没有多大意义)。 – manueGE
作为一个方面说明,即使对象不是'nil',将一个对象转换为'BOOL'也可以产生'NO'。 'BOOL'将使用指针的最后几位,可以是这样的:'00000000',它将被注册为'NO'。请参阅本文中的“投射到BOOL”:https://www.mikeash.com/pyblog/friday-qa-2012-12-14-objective-c-pitfalls.html – MaxGabriel
感谢您的线索,但事情是我想弹出一个警告只有单元测试用例运行,我不想在源代码中添加任何布尔变量。我只想知道哪个目标运行有任何方法来检查它? –
不是你使用unittest的框架提供这样一个标志吗? – CloudyMarble
不,但我最终使用了布尔标志,正如你所说的。谢谢 –