测试方法返回特定对象的junit

时间:2018-07-01 02:30:16

标签: java unit-testing junit5

我正在尝试创建我的第一个测试。 我必须证明某个方法返回了ContextLambda类型,我正在使用assertSame函数对其进行测试,但是我的测试失败了,我不知道使用什么assert来测试它,而assertEquals也失败了。 我的测试是这样的:

@Test
public void testCanCreateContextForLambda() {
    ContextFactory factory = new ContextFactory();

    LambdaContext context = factory.forLambda(
            new FakeRequest(),
            new FakeResponse(),
            new FakeLambda()
    );
    assertSame(LambdaContext.class, context);
}

2 个答案:

答案 0 :(得分:2)

尝试使用instanceofassertTrue: 包括assertTrue导入:

import static org.junit.Assert.assertTrue;

然后进行实际测试:

@Test
public void testCanCreateContextForLambda() {
    ContextFactory factory = new ContextFactory();

    LambdaContext context = factory.forLambda(
            new FakeRequest(),
            new FakeResponse(),
            new FakeLambda()
    );
    assertTrue(context instanceof LambdaContext);
}

只要contextLambdaContext类型的类(例如,使用接口使其不重要),该断言将是微不足道的,并且始终为真。

答案 1 :(得分:1)

您对assertSame的断言是对LambdaContext.class == context的断言。这永远不会是真的。

您可以通过多种方式更正断言

  • context instanceof LambdaContext无关紧要(总是如此)
  • context.getClass() == LambdaContext.class几乎是微不足道的(可能永远是真的)

可以使用junit5库的assertSameassertTrue编写这些测试(请参见其他答案)。

我的最佳建议:删除此测试,并编写一个断言context的非平凡属性的测试。