繁体   English   中英

JUnit4 - 测试方法什么都不做

[英]JUnit4 - Test if method does nothing

如何测试方法是否无效。 例如,我有一个静态方法,如果给定的字符串参数为null或为空(它用于参数验证),则抛出异常。 现在我的测试看起来像这样:

@Test
public void notNullOrEmpty_doesNothingIfValueIsNotNullOrEmpty() {
    Require.notNullOrEmpty(Generate.randomString());
    assertTrue(true); // <- this looks very ugly
}

@Test(expected = IllegalArgumentException.class)
public void notNullOrEmpty_throwsExceptionIfValueIsNull() {
    Require.notNullOrEmpty(null);
}

@Test(expected = IllegalArgumentException.class)
public void notNullOrEmpty_throwsExceptionIfValueIsEmpty() {
    Require.notNullOrEmpty("");
}

如何在不调用assertTrue(true)情况下使第一个测试通过,有一个Assert.fail()有类似Assert.pass()东西吗?

编辑:添加缺失(expected = IllegalArgumentException.class)到第3次测试

您只需要在第一种方法中删除断言。

@Test
public void notNullOrEmpty_doesNothingIfValueIsNotNullOrEmpty() {
    Require.notNullOrEmpty(Generate.randomString());
    // Test has passed
}

如果测试方法完全运行,则意味着它成功通过。 看看Eclipse junit输出:

在此输入图像描述

更新:作为附加注释,如果您使用Mockito框架,则可以利用verify方法来验证方法是否被调用X次。 例如,我使用了这样的东西:

verify(cmAlertDao, times(5)).save(any(CMAlert.class));

在您的情况下,由于您正在测试静态方法,因此您可能会发现使用PowerMock有用,它允许您验证静态方法(因为Mockito没有)。 你可以使用verifyStatic(...)

您应该添加@Test(expected = YourException.class)注释。

尝试添加到第一个测试:

@Test
public void notNullOrEmpty_doesNothingIfValueIsNotNullOrEmpty() {
    String str = Generate.randomString();
    Require.notNullOrEmpty(str);
    assertNotNull(str);
}

并且你可能最好将它重命名为notNullOrEmpty_doesNothingIfValueIsNotNullOrNotEmpty因为你测试的notNullOrEmpty_doesNothingIfValueIsNotNullOrNotEmpty空值。

单元测试必须断言在方法的行为中预期的。
如果在您的规范中,当您调用notNullOrEmpty()时,当数据有效时必须抛出异常,并且当数据无效时必须抛出异常,因此在单元测试中,当数据有效时您必须不进行断言,因为如果它没有成功,会抛出异常并且测试将失败。

@Test
public void notNullOrEmpty_doesNothingIfValueIsNotNullOrEmpty() {
    Require.notNullOrEmpty(Generate.randomString());
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM