【问题标题】:Test method return specific object junit测试方法返回特定对象junit
【发布时间】:2018-12-09 17:23:14
【问题描述】:

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

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

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

【问题讨论】:

  • 你不需要断言。您可以将值分配给 LambdaContext 类型的局部变量这一事实已经 100% 保证了我们所期望的类型。
  • Java 是一种静态类型语言。测试方法的返回类型是没有意义的(除非我们谈论的是多态性)。

标签: java unit-testing junit5


【解决方案1】:

尝试使用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 类型的类,此断言将是微不足道的并且始终为真(例如,使用接口使其不微不足道)。

【讨论】:

  • 还有另一种使用assertThat的方法:stackoverflow.com/questions/12404650/…
  • Junit5 的导入是org.junit.jupiter.api.Assertions.assertTrue
  • 我使用 assertThat(Object, instanceOf(AnotherObject));这些依赖属于 import static org.hamcrest.CoreMatchers.instanceOf;导入静态 org.hamcrest.MatcherAssert.assertThat;
【解决方案2】:

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

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

  • context instanceof LambdaContext 将是微不足道的(总是正确的)
  • context.getClass() == LambdaContext.class 几乎是微不足道的(可能总是如此)

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

我最好的建议:放弃这个测试并编写一个断言context 的重要属性的测试。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多