我正在编写JUnit测试,用于以各种方式创建并在实体上执行操作的服务。我希望我的测试能够尝试很多不同的活动组合。我有这样的事情:写这套JUnit测试的“正确”方式是什么?
test1() {
/** create entity **/
/** assert **/
}
test2() {
/** do X to entity **/
/** assert **/
}
test3() {
/** do X again to entity, expect failure **/
/** assert **/
}
test4() {
/** do Y to entity, expect success **/
/** assert **/
}
但是,我的理解是,我不能指望JUnit进行正确的顺序测试,以及每个测试应该完全自给自足的。
但是,如果我做每一个包含自我测试,然后有很多重复的代码,事情办得相当长,而且它更难以维持......例如:
test1() {
/** create entity **/
/** assert **/
}
test2() {
/** create entity **/
/** do X to entity **/
/** assert **/
}
test3() {
/** create entity **/
/** do X to entity **/
/** do X again to entity, expect failure **/
/** assert **/
}
test4() {
/** create entity **/
/** do X to entity **/
/** do X again to entity, expect failure **/
/** do Y to entity, expect success **/
/** assert **/
}
...如果你跟着我。
所以我的问题是,写这些测试的“正确”方式是什么,所以代码干净而优雅?
谢谢,罗布
我可以建议选项#3,您只有test4(){...}更多断言来记录失败的位置。 – Sam
@sam当然,您不是在一次JUnit测试中提示多个断言?正确?甚至http://junit.sourceforge.net/doc/faq/faq.htm#tests_12建议每个测试一个断言 –
我建议,是的。 :)根据Robert Hume测试的结果,我不认为这个建议是有帮助的。您可以说应该使用另一个测试框架来测试一系列事件或特定的使用场景。您也可以构建一个测试运行程序来维护测试用例中的顺序,但是会打破另一个常见问题解答。好的想法,但。 – Sam