java - 如何为调用其他方法的方法编写单元测试?

标签 java unit-testing

这是一个非常糟糕的代码示例。对于那个很抱歉。 我想为 myMethod() 编写一个单元测试。这只调用其他方法并返回字符串str1。我认为没有必要测试此代码。

public class MyClass{
    private String str1;
    private String str2;

    private void m1(){..}
    private String m2(){  
         // do something
        return someString;

    }
    public String myMethod(String s1){
      str2 = s1;
      m1();
      str1 = m2();
      return str1;
    }
}

最佳答案

编写单元测试的方法有多种。

A) 您观察行为。您创建一个被测试类的对象,然后调用方法;然后您对返回的值assertThat

B)当您的对象使用其他对象时,您可能必须转向模拟框架,例如验证您是否看到这些对象上的预期方法调用。

就您而言,这实际上取决于 m1/m2 正在做什么。如前所述 - 最好的单元测试是那些检查被测代码的“可观察”行为的测试。就像这些例子一样:

@Test(expected=NullPointerException.class)
public void testMyMethodWithNull() {
  new MyClass().myMethod(null);
}

上面的代码将检查当使用 null 调用您的方法时是否会抛出 NPE。

@Test
public void testMyMethodWithEmptyString() {
  MyClass underTest = new MyClass();
  assertThat(underTest.myMethod(""), is("some expected string for empty input"));
}

那个对 EMPTY 输入进行了一些不同的检查。

因此,您可以按照自己的方式处理所有有意义的输入。当然,这里的想法是可以通过这种方式检查被测类的所有可能行为。如果还有其他因素发挥作用,您当然必须考虑它们。但理想情况下,情况不应该是这样:您应该设计所有代码,以便尽可能轻松地对其进行全面测试;理想情况下,除了此类测试之外不需要编写任何其他内容。

关于java - 如何为调用其他方法的方法编写单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40028812/

相关文章:

java - 使用 Swing 将工具栏添加到框架

java - 如何从 Ubuntu 中正确卸载 Interactive Brokers 的 TWS(交易者工作站)?

c# - 如何对代码覆盖率进行单元测试?

reactjs - 测试 withRouter 中包含的 react 组件(最好使用 jest/enzyme)

c# - Kestrel 在 xUnit 测试中没有监听

ios - XCode 9 缺少 CoreSimulator.framework

java - 提取 Sybase 数据库的 DDL 语句

java - 用 Java 构建 GUI

java - Java多线程,如何停止?

c# - 单元测试 C# 创建第一个测试