这是一个非常糟糕的代码示例。对于那个很抱歉。 我想为 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/