我有以下试验(简化了此问题):从属功能JUnit测试不能共享静态字段
@FixMethodOrder(MethodSorters.JVM)
public class ArticleTest {
private static Article article;
@Test
public void testCreateArticle() {
articleService.create("My article");
article = articleService.findByTitle("My article");
assertNotNull(article);
}
@Test
public void testUpdateArticle() {
article.setTitle("New title");
articleService.save(article);
assertNull(articleService.findByTitle("My article"));
article = articleService.findByTitle("New title");
assertNotNull(article);
}
}
testCreateArticle
成功通过,但在第一行testUpdateArticle
失败,因为article
是null
,因而抛一个NPE(虽然第一个测试声称article
不是null
)。
任何人都明白为什么?请注意,我运行测试与Play框架(它喜欢字节码操作),所以这可能有关...
此外,我知道有依赖测试是一种不好的做法,但IRL,这不是单元测试而是一种测试场景的,所以我只是想给相关测试一个尝试自己理解为什么人们不喜欢他们;)
但无论如何,静态字段都应该是测试之间共享, 我错了吗?
更新:我知道我可以在testUpdateArticle()
重建的文章,但真正的测试是比较复杂的(也许我没有创造一个MVCE ...)。假设我有第三个测试依赖于第二个测试(取决于第一个测试)等等。第一个测试不需要任何特别的东西,第二个测试需要创建的文章,第三个需要创建和更新的文章等。我想尽量避免每次重做所有数据库操作,通过保持测试之间的状态(使它们依赖于此)。
也许在这种情况下更好的使用TestNG,它支持依赖测试。 – user1516873