M. *_*ley 7 unit-testing timeout
我是一个单元测试类的属性,其值经常变化,这取决于它从另一个组件接收的通信.如果该类在5秒内未收到任何通信,则该属性将恢复为默认值.
我很容易存根和模拟通信组件,以便触发我想要测试的值.问题是如果我在繁忙的机器上运行我的单元测试(比如构建机器),并且有足够的延迟导致属性默认,那么我的单元测试将失败.
在模拟各种通信条件时,您将如何测试以确保此属性具有适当的值?
一个想法是重构我的代码,以便我可以存根控制超时的类的部分.另一种方法是编写我的单元测试,以便它可以检测是否由于超时而失败并在测试结果中指出.
mha*_*ler 10
我会尝试不同的方法.游戏开发者通常需要一种方法来控制游戏时间,例如快进功能或同步帧速率.它们引入了一个Timer
对象,它可以从硬件时钟或模拟时钟中读取刻度.
在您的情况下,您可以为单元测试提供可控定时器,并为生产模式下的系统时间提供计时器.这样,您可以控制测试用例的通过时间,从而控制被测试类在某些超时条件下的反应.
伪代码:
public void testTimeout() throws Exception {
MockTimerClock clock = new MockTimerClock();
ClassUnderTest cut = new ClassUnderTest();
cut.setTimerClock(clock);
cut.beginWaitingForCommunication();
assertTrue(cut.hasDefaultValues());
cut.receiveOtherValues();
assertFalse(cut.hasDefaultValues());
clock.tick(5,TimeUnit.SECONDS);
assertTrue(cut.hasDefaultValues());
cut.shutdown();
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4263 次 |
最近记录: |