【发布时间】:2021-07-28 13:46:57
【问题描述】:
对于类似的答案,我已经看到了几个以前的答案。我仍然无法理解,因为我是新手。下面是我的代码
package com.kishore.junitTestCases.innerClasses;
public class OuterClass {
String prefix = "Hello, ";
private class InnerClasss {
public String greet(String name) {
return prefix+name;
}
}
public String displayFromInnerClass() {
InnerClasss inner = new InnerClasss();
String greetText = inner.greet("Kishore");
System.out.println(greetText);
return greetText;
}
}
是否可以在不更改上述代码中的任何内容的情况下编写 JunitTestCase?我正在使用 PowerMockito。这是我构建的一半测试用例。
package com.kishore.junitTestCases.innerClasses;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.MockitoAnnotations;
import org.powermock.modules.junit4.PowerMockRunner;
@RunWith(PowerMockRunner.class)
public class OuterClassTest {
OuterClass outerClass = new OuterClass();
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
}
@Test
public void displayFromInnerClassTest() throws Exception {
}
}
注意:您还可以推荐一些最佳做法吗?谢谢。
【问题讨论】:
-
您到底想测试什么?我们通常测试代码的公共接口以验证其行为。私有方法应该被传递测试。 --- “我正在使用 PowerMockito。” - 提醒一句:PowerMock 使用字节码操作。尽可能避免。
-
当你有一些东西既想测试又不能用代码的编写方式进行测试时——这表明代码应该以不同的方式编写。这并不总是可行的,对于此类情况,可以使用 PowerMock,但需要将其视为最后的手段。
-
@Turing85 好的。 PowerMockito的使用,我会小心的。我想从上面的 OuterClass 测试 displayFromInnerClass 方法。
-
你想测试
assertThat(new OuterClass().displayFromInnerClass()).isEqualTo("Hello, Kishore")没有的什么? -
那么您应该将这些服务作为类的“可注入”依赖项(例如,通过构造函数或通过方法等传递)。在测试期间您将注入模拟,而在生产代码中您将注入真实对象。
标签: java junit mockito powermock powermockito