如何编写junit测试以查看返回的内容?

时间:2015-01-07 16:02:45

标签: java junit

编写单元测试非常新。 有人可以帮我写一个测试吗

public List<PspTransaction> mapToDomainList(List<PspTransactionEntity> entityList) {
        List<PspTransaction> domainList = new ArrayList<PspTransaction>();
        for (PspTransactionEntity entity : entityList) {
            domainList.add(map(entity, new PspTransaction()));
        }
        return domainList;

我想知道哪些东西是好的测试和一个简单的指南,所以我可以学习未来。此外,我真的想知道如何查看是否返回了domainList。 是断言吗?

3 个答案:

答案 0 :(得分:1)

一般来说,你可以在这里测试几件事。

  1. 测试您是否输入空列表,然后返回空列表。
  2. 测试您是否输入非空列表,返回具有相同数量元素的列表。
  3. 测试是否输入具有已知值的非空列表,结果包含的值看起来像是您期望的映射值。 不要测试映射本身;这应该在map函数的单独测试中完成。
  4. 测试否定案例,例如将null传递给该函数。
  5. 有助于您完成这些任务的方法是:

答案 1 :(得分:1)

我鼓励您尝试先考虑您想要测试的结果,然后编写一些代码来进行测试通过(TDD)。这可以帮助您开发良好的界面和设计易于理解的类,甚至可以重复使用。

这里的一些经验法则是,您希望您的课程有一个责任和您的方法做一件事 - 实质上,它是KISS原则,但有一些特定的设计提示。此外,我喜欢考虑行为测试而不是方法测试 - 这是一个微妙的差异,我将难以解释!

在我考虑系统要做的事情之前,我有一个测试方法,所以我觉得这样做更难,但我会分享我的想法。我喜欢使用AssertJ断言。我只是想要这个,所以它没有看到编译器。

import static org.assertj.core.api.Assertions.*;
...

private TestSubject testSubject = new TestSubject(); // instance of the class under test (you omit the actual class name)
...

@Test
public void should_return_empty_list() {
    // Arrange
    List<PspTransactionEntity> input = new ArrayList<PspTransactionEntity>();

    // Act
    List<PspTransaction> mapResult = testSubject.mapToDomainList(input);

    // Assert
    assertThat(mapResult.size()).isEqualTo(0);
}

@Test(expected=java.lang.NullPointerException.class)
public void should_throw_null_pointer_exception() {
    // Act
    List<PspTransaction> mapResult = testSubject.mapToDomainList(null);
}

所以,如果我从代码向后工作到测试,我想我会想要测试。想想幸福的道路,还有你的边缘情况,比如你传递null时会发生什么等等。这有意义吗?希望它有所帮助!

答案 2 :(得分:0)

由于您只是在domainList方法中创建了一个新的mapToDomainList,因此总是会返回assertFalse(returnedDomainList.isEmpty());。因此,您需要检查entityList之类的内容是否为空 如果entityList不为空,这将有效。

如果{{1}}为空,您可以声明返回的列表也是空的。