当前位置: 首页 > 知识库问答 >
问题:

PowerMockito测试MongoClient单例

侯沈义
2023-03-14

我有一个带有静态方法的惰性单例MongoConnection类,该静态方法返回MongoConnection.getClient()上的MongoClient实例:

 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方法。

我没有选择singleton,因为应用程序中只有MongoClient的单个实例(根据MongoDB文档)。

谢谢你

共有1个答案

巫朝明
2023-03-14

下面的示例演示如何将Mockito与PowerMockito一起使用来模拟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
    }
} 

此类验证的对象为:

  • Mockito v2.7.19
  • PowerMock v1.7.0
  • JUnit v4.12
 类似资料:
  • 我正在为一个单例Java类编写单元测试(使用JUnit和Mockito)。我无法更改类实现本身。 使用PowerMockito,它是这样的(并且工作): 要求重写测试,而不使用PowerMock或PowerMockito或任何其他静态模拟API。由于我不能将单例类更改为使用依赖注入,我不确定什么是这样做的好方法。 任何帮助都将不胜感激。

  • 我有一个类需要进行单元测试: 我有一个测试用例: 当我运行测试用例时,没有使用ActiveMQConnectionFactory的模拟对象。相反,正在使用实际的实现,并且正在建立TCP连接: 我尝试了Powermockito和Mockito,但都失败了。如何模拟对象,如何成功运行测试用例? 我是单元测试新手,试图从各个社区获得帮助,但没有找到合适的答案。任何帮助都将不胜感激。谢谢

  • 为了测试我编码的私有方法之一,我需要模拟一个单例。 用PowerMockito测试了几种方法后: 我在UtilDatabaseEnrichissement的absract父类中将配置文件定义为常量,并在构造函数中使用。 我怎么测试这部分呢?

  • 我试图在与TestNG的集成测试中用PowerMockito模拟一个静态方法,但迄今为止没有乐趣。 这种模拟机制在单元测试中有效,但在集成测试中无效。我得到以下错误: 根据本页,您可以/应该使用注释来消除类加载器问题。我尝试了几种(随机)组合(当然,一次一种): 我更进一步: 但这看起来像是一场自由式变化的大雁追逐: 其他资源建议使用,但如果我没弄错的话,这是针对JUnit的,我正在使用TestN

  • Android Studio 1.1 添加了单元测试支持,详细请看 Unit testing support。本章的其余部分描述的是 “instrumentation tests”。利用 Instrumentation 测试框架可以构建独立的测试 APK 并运行在真实设备(或模拟器)中进行测试。

  • 英文原文:http://emberjs.com/guides/testing/unit/ 单元测试用于测试代码的一个小片段,确保其功能正常。与集成测试不同,单元测试被限定在一个范围内,并且不需要Ember应用运行。 全局 vs 模块 过去如果没有作为一个全局变量加载整个Ember应用,要对应用进行测试非常困难。通过使用模块(CommonJS,AMD等)来编写应用,可以只加载被测试的部分,而不用将其