我想在被测试的类中存根一个私有方法。我正在使用junit 5。我以前使用过powermock来实现这一点。不幸的是,junit 5不能与powermock一起使用。
为了更好地解释这个问题,我简化了这个例子。我有一个类,它有一个在公共方法内调用的私有助手方法。如下所示:
public class Service {
private Repository repository;
public Object findById(String id) {
Object object = repository.findById(id);
object = verify(object);
return object;
}
private Object verify(Object object) {
//removed for simplicity
return object;
}
}
现在我想单元测试Service
的方法findById
。我已经使用jUnit 5和mockito来实现Service类的单元测试。
java prettyprint-override">public class ServiceUTest {
@InjectMocks
private Service service;
@Mock
private Repository repository;
@BeforeEach
public void setUp() {
MockitoAnnotations.initMocks(this);
}
@Test
public void testFindById() {
when(repository.findById(Mockito.any())).thenReturn(new Object());
//how to stub verify method
}
}
我将感谢任何帮助和指导来解决这个问题。
当做
通常,单元测试应该验证单元的公共接口。
存根私有方法是个坏主意。在这种情况下,测试与实现细节紧密耦合。通常,您想要测试行为,而不是实现。
我的建议是从存储库返回这样的对象,它将以您想要的方式符合验证逻辑。
解决此类问题的另一种方法是将感兴趣的部分转移到一个新类中。因此,您可以将其作为依赖项注入到您的服务中。例如,您可以使用规范模式来提取验证逻辑。
您可以监视服务并使用PowerMockito定义方法的行为。
public class ServiceUTest {
@InjectMocks
private Service service;
@Mock
private Repository repository;
@BeforeEach
public void setUp() {
MockitoAnnotations.initMocks(this);
}
@Test
public void testFindById() {
// Arrange
Service spyService = spy(service);
when(repository.findById(Mockito.any())).thenReturn(new Object());
PowerMockito.when(spyService, "verify", any()).thenReturn(expectedObjectReturn);
// Act
Object actual = spyService.findById("id");
// Assert
}
}
我有一个带有私有方法的类,该方法调用一些外部类并执行它,如果不使用powermock,我如何防止这种情况发生?(该项目使用Junit5,目前还不支持powermock)。 我考虑过将这些函数移到外面,但我觉得有时方法确实属于特定的类,因为它们是它的一部分,将它们移出对我来说没有意义,下面只是一个例子来说明。 我已经知道大多数人会说不要测试私有方法,但a.我不完全同意,b.我不想在这里测试这个方法,
我正在尝试测试下一种方法: 称为PrivateMethod: asyncTask的执行无法在Mockito的测试中完成,所以我需要以某种方式模拟它。我试着用PowerMock来嘲弄私有方法: 这在PowerMockito行(NullPointerException)中给了我一个异常,它说 方法引发了“org.mockito.exceptions.Misusing.UnfinishedStubbin
下面是从测试中的类调用的类的代码示例 所以我的问题是如何成功地模拟CodeWithAnotherPrivateMethod类的doTheGamble()方法,使其始终返回true?
在JUnit5中,我试图获得一个从扩展运行的测试类方法。我正在使用JUnit5扩展接口TestWatcher,并重写testFailed()方法。 这个扩展的目的是在测试类的Selenium WebDriver浏览器中拍摄失败的屏幕快照,并将其附加到该测试的诱惑报告中。test class方法有实例化的浏览器和注释,用于附加到Allure。并且我的takeScreenshot方法依赖浏览器和来自测
问题内容: 我有一个名为Java的Java类,我想用JUnit进行测试。我要测试的公共方法调用同一类中的私有方法,以确定要遵循的条件路径。我的目标是为中的不同路径编写JUnit测试。另外,调用服务,因此我不希望在运行JUnit测试时实际执行该服务。 模拟和控制其返回值以便我可以测试“ methodA”的不同路径的最佳方法是什么? 我更喜欢在编写模拟时使用JMockit,因此我对适用于JMockit
我想现在,如果有可能模仿一个类一样 我们的业务逻辑在代码中的某个地方用< code>new myClass()创建了这个对象,因此我不能访问创建的对象来模拟这些方法。有没有办法替换整个类或者覆盖那些方法。我正在使用mockito,我只找到了这样做的例子 我们不能使用 PowerMock,因为它与我们的测试环境不兼容。 欢迎任何建议。