junit 关于单元测试依赖项

zaq34kh6  于 2022-11-11  发布在  其他
关注(0)|答案(2)|浏览(169)

我正在为我目前正在处理的一个项目编写一些基本的单元测试,我的服务有一个addPlaneModel方法来添加一个平面模型(在幕后,它将一个PlaneModel示例添加到一个TreeMap中,如果TreeMap已经包含该键,则抛出一个自定义异常)。
我可以写个测试(例如shouldAddNewPlane_Succeed)来查看它是否正确添加了PlaneModel,但是如果我想创建一个测试来查看PlaneModel是否已经存在(例如shouldAddNewPlane_ThrowExistingModelException,因为我应该调用addPlaneModel两次来使它抛出异常,但是如果shouldAddNewPlane_Succeed测试没有首先运行,我真的不“知道”这个方法是否像它应该的那样工作。
我读到过单元测试应该是相互独立的,但是我真的不知道在这种情况下怎么做,我一定要按顺序运行它们吗?

vpfxa7rd

vpfxa7rd1#

您应该在每次测试之前建立所测试类别的新执行严修。
因此,您的测试类将如下所示:

class MyTests {
  private MyService myService;

  @Before // junit 4, or @BeforeEach for junit 5
  public void setup() {
    myService = new MyService(... pass mocks of dependencies ...);
  }

  @Test
  public void aTest() {
    myService...
  }

  @Test
  public void aTest2() {
    myService... // this is a fresh instance of MyService, any changes to the
                 // state of the instance used in aTest() are gone.
  }
}
o2g1uqev

o2g1uqev2#

如果你想在运行测试之前执行一些常见的代码,你可以使用JUnit中的@Before方法注解。

@Before
public void init() {
    LOG.info("startup");
    list = new ArrayList<>(Arrays.asList("test1", "test2"));
}

此代码将始终在您运行的任何其他测试之前执行。这对于定义测试的特定执行顺序很有用。

相关问题