我有一个懒惰的单一MongoConnection
类,其中一个静态方法在MongoClient
上返回MongoConnection.getClient()
个实例:
public class MongoConnection {
private static MongoClient mongoclient;
private MongoConnection() {
}
public static MongoClient getClient() {
if (mongoclient == null) {
// code to initialize MongoClient
}
return mongoclient;
}
}
如何使用PowerMockito模拟MongoConnection
单例并测试getClient
方法。
我没有选择单例,因为整个应用程序中会有单个MongoClient
实例(根据MongoDB文档)。
注意:我不想在测试中连接到实际的DB,因为它将是集成测试而不是JUnit;我只想确保使用预期参数初始化MongoClient
。如何使用PockerMockito实现这一目标?
谢谢
答案 0 :(得分:1)
以下示例显示如何使用Mockito和PowerMockito来模拟css
:
animation
此课程经过验证:
顺便说一下,这个:
我没有选择单例,因为整个应用程序中会有单个MongoClient实例(根据MongoDB文档)。
...并不强制要求您MongoConnection.getMongoClient()
静态。您可以使@RunWith(PowerMockRunner.class)
@PrepareForTest({MongoConnection.class})
public class ATest {
@Test
public void aTestWhichRequiresMockingMongoConnection() {
MongoClient mongoClient = Mockito.mock(MongoClient.class);
PowerMockito.mockStatic(MongoConnection.class);
Mockito.when(MongoConnection.getClient()).thenReturn(mongoClient);
// set up some expectations on the mocked MongoClient returned by MongoConnection
Mockito.when(mongoClient.getDatabase("aDatabaseName")).thenReturn(...);
// ... etc
}
}
成为非静态方法,并确保MongoClient
是单例,即您的应用程序只有单个实例。依赖注入解决方案(例如Spring,Guice)具有内置支持,可确保将依赖关系配置为单例。