微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何以正确的方式测试 JUnit 的构造函数?

如何解决如何以正确的方式测试 JUnit 的构造函数?

我目前正在为某些代码编写一个 Junit 测试套件。

我正在做的是,有一个名为 Person 的类,其中它的构造函数具有名称、高度和重量变量。

在其构造函数中,如果名称的字符数超过 20,则会引发异常。

如果测试需要测试构造函数不接受超过20个字符的名字,我该如何编写测试方法

例如,如果我写:

@Test (expected = IllegalArgumentException.class)
public void testPersoin() {
Person person = new Person("BobBobBobBobBobBobBobBobBobBobBobBobBobBobBobBobBobBob","172","62");
}

当我运行它时,它会通过测试用例,但它只是测试名称的长度: “BobBobBobBobBobBobBobBobBobBobBobBobBobBobBobBobBobBobBob”,但不能使用更长或更短的名称

有没有什么合适的方法可以测试names的字符是否大于20? 我应该在测试方法中编写 if/else 条件吗?我应该如何在测试套件中展示 if 的边界?

谢谢!

解决方法

我不确定您需要什么,但也许这就是您所追求的:

@Test (expected = IllegalArgumentException.class)
public void testPersoin() {
    // Extract the name
    String name = "BobBobBobBobBobBobBobBobBobBobBobBobBobBobBobBobBobBob";
    // Assert that it is over 20 characters long
    assertTrue(name.length() > 20);
    person = new Person(name,"172","62");
}

有时您可能还需要在测试前断言测试参数是有效的。但这不是最好的方法。最好只是让测试尽可能清晰,处理所有案例并正确命名案例,例如:

private static final String NAME_10 = "0123456789"; // below 20
private static final String NAME_20 = NAME_10 + NAME_10; // exactly 20
private static final String NAME_21 = NAME_20 + "x"; // over 20

private Person person;

@Test(expected = IllegalArgumentException.class)
public void personNameOver20Throws() {
    new Person(NAME_21,"62");
}

// I assume that null and empty names are not allowed either
@Test(expected = IllegalArgumentException.class)
public void personNameNullThrows() {
    new Person(null,"62");
}

@Test(expected = IllegalArgumentException.class)
public void personNameEmptyThrows() {
    person = new Person("","62");
}

@Test
public void personNameBelow20Works() {
    person = new Person(NAME_10,"62");
}

@Test
public void personNameExactly20Works() {
    person = new Person(NAME_10,"62");
}
,

有什么问题:

if(name==null || name.length()>20)
  throw new IllegalArgumentException();
...//rest of code in constructor

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。