0

我正在处理我的测试根据声明顺序通过或失败的情况。这当然指向没有正确隔离的测试。但我对如何寻找问题感到困惑。问题是我的 junit 测试派生自一个属于基于 junit 构建的测试框架并具有一些依赖注入容器的类。容器通过基类设置为每个测试重置,因此至少在容器中没有延迟对象,因为容器本身是新的。所以我倾向于以下场景。

  1. test1 间接导致一些 classA 将 classA.somestaticMember 设置为 xyz 值。test obj 不直接维护对 classA 的任何引用,但在 test1 结束时,vm 仍会使用值 xyz 加载 classA。
  2. test2 访问 classA 并在一些具有 xyz 值的静态成员上绊倒。

问题是a)我不知道这是否确实如此 - 我该如何找到它?我似乎无法在代码中找到对静态变量的引用... b) 有没有办法告诉 junit 转储其所有加载的类并为每个测试方法重新执行?

4

1 回答 1

1

你可以用 声明一个方法@Before,比如

@Before public void init()
{
    // set up stuff
}

JUnit 将在每次测试之前运行它。您可以使用它来设置“夹具”(一组已知的新对象、数据等,您的测试将彼此独立地使用)。

还有一个@After, 可用于在每次测试后进行所需的任何清理。您通常不需要这样做,因为 Java 会清理您使用的任何对象,但它对于将外部对象(您不创建和控制的东西)恢复到已知状态可能很有用。

(但请注意:如果您依赖外部对象来进行测试,那么您所拥有的就不再是单元测试了。您不能真正说出失败是由于您的代码还是外部对象,这就是单元测试的目的之一。)

于 2011-10-11T00:39:04.330 回答