繁体   English   中英

JUnit测试失败案例

[英]JUnit tests for failing cases

我已经使用py.test(以我推荐的方式)编写了一段时间的python单元测试。

现在,我正在使用JUnit4在Java上进行操作。 关于单元测试的有趣之处在于,在过去我对每个函数进行两次测试的python上,当并非所有事情都按预期进行时(例如,Web服务返回的意外数据,无效的输入数据...),检查代码的行为方式。

  1. 第一个测试将检查当一切按预期工作时代码的行为
  2. 第二项测试将模拟各种潜在问题,网络问题,脏/意外/无效的响应数据等。

我通常称它们为test_foo()和test_foo_ko(),当然Java会使用camelCase。

问题是,我应该将所有用例集中在一个测试中的一段代码,还是应该像在python上一样将它们分成两部分,还是应该对每个可能的情况进行测试?

我采用了命名模式“ methodName_stateUnderTest_ExpectedBehavior”。 我在测试名称中使用下划线以提高可读性(IMO)。

@Test(expected=IllegalArgumentException.class)
public void sum_negativeNumberAs1stParam_ExceptionThrown(){
     //...
}

这种命名策略还意味着我为每种边缘情况编写一个测试。

我也没有在我的方法名称前加上“ test”前缀。 当JUnit过去不支持注释时,这是必需的,但如今已经不相关了(考虑到您正在使用JUnit 4)。

我没有任何“官方”建议可以支持我,但是我一直认为最好的方法是每一种情况都可以-这样做的好处是,如果您恰当地命名它们,自动运行器可以立即准确地告诉您出了什么问题-如果“ testCallMethodWithAParticularEdgeCaseCalledFooShouldResultInBarOutput”失败,则说明问题出在Foo边缘。

当然,您可以自己进行大量日志记录,但是当您仅将其放在方法名称中时为什么还要打扰呢。

它还可以防止测试之间的意外出血-您可以更确定测试是独立的。

编辑:您可能希望进行单独测试的另一个原因:如果抛出特定异常,则可以使用JUnit导致测试成功-对于失败情况很有用,因此您不必弄乱try / catch块。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM