gpt4 book ai didi

java - 复杂环境下的JUnit测试

转载 作者:行者123 更新时间:2023-12-01 09:57:59 25 4
gpt4 key购买 nike

我必须实现一种方法来测试应用程序的不同方法。我正在收集有关 JUnit 的信息,因为这是正确测试应用程序方法的最著名的方法,但我有很多问题,并且需要我找不到的答案。

所以我有以下 JUnit 测试,我能想到的更简单:

public class Civilian {
private final String firstName;
private final String lastName;
private final int birthDate;

public Civilian(String firstName, String lastName, int year) {
this.firstName = firstName;
this.lastName = lastName;
this.birthDate = year;
}

public String getFullName() {
return firstName + " " + lastName;
}
}

和测试类:

public class CivilianTest {

@Test
public void getFullNameTest() {
Civilian civ = new Civilian("bob", "Reynolds",1997);

Assert.assertEquals("bob Reynolds", civ.getFullName());
}
}

在此示例中,我必须知道 getFullName 方法的结果,以便在 assertEquals() 方法中进行比较。但这样的测试怎么能保证这个方法在任何情况下都有效呢?

在我必须处理的应用程序中,他们使用来自不同数据库的大量数据,这些数据将通过该方法进行修改并返回修改后的数据。

问题是,在我使用该方法之前很难知道这些数据的结果。 JUnit只能这样用吗?如何在相同的数据上测试相同方法的多次使用?

最佳答案

您应该牢记一些测试原则:

  • 使用您想要运行的数据来设置您的测试。 可以掌控这一切。
  • 您的代码应该足够强大,能够处理任何有效且受支持的数据。对出现的任何错误情况保持理智。
  • 测试所有案例。当代码进入边缘情况或意外情况时,仅测试快乐路径不会有任何效果。

对于您的 getFullName() 方法,我看到四种不同的情况值得检查:

  • firstNamelastName 都不为 null
  • firstName 为 null 并且 lastName 不为 null
  • firstName 不为 null 并且 lastName 不为 null
  • firstNamelastName 均为 null 时

如果您涵盖了这些情况,那么您向其中注入(inject)的实际实时数据应该并不重要;您已经测试了此方法可能遇到的四种可能的状态,希望您能够在遇到这些情况时做出明智的选择。

最主要的是,您可能会将单元测试与端到端测试混为一谈,其中一个测试仅查看小单元并确保其表现良好,而另一个测试则查看整个应用程序(仍然使用模拟)数据,但仍然有大量数据)并确保它作为一个有凝聚力的单元。请记住:您在这里测试的是代码单元,而不是通过此方法测试整个系统。

关于java - 复杂环境下的JUnit测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37032331/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com