【问题标题】:Mocking a static method which is written in Scala in Java Unit test在 Java 单元测试中模拟用 Scala 编写的静态方法
【发布时间】:2016-03-17 17:34:17
【问题描述】:

我们在一个项目中使用 Kafka 客户端。 我正在尝试通过 JMockit 从 Kafka 客户端模拟一个静态方法:

    new NonStrictExpectations() {
        {
            new MockUp<Consumer>()
            {                   
                @Mock
                ConsumerConnector createJavaConsumerConnector(
                        ConsumerConfig c){
                    return null;
                }
            };
        }
    };

看起来 JMockit 由于某种原因无法正常工作。我确信 JMockit 用于模拟静态方法的语法。这是错误:

java.lang.IllegalArgumentException: Matching real methods not found for the following mocks:
dispatcher.DispatcherTests$1$1#createJavaConsumerConnector(kafka.consumer.ConsumerConfig)

如果这不起作用,因为 Kafka 客户端代码在 Scala 中,我的程序如何工作?

【问题讨论】:

  • 我正在使用 JMockit,并且我知道如何模拟静态方法。它只是不适用于上述 Scala 代码。
  • 抱歉,混淆了两个模拟库
  • 假设 Consumer 是一个 Scala object,从 Java 中引用其类型的方法是 Consumer$ - 所以你可能想尝试将 new MockUp&lt;Consumer&gt;() 替换为new MockUp&lt;Consumer$&gt;()
  • 好吧,它不能用那个编译
  • 为什么有人会把MockUp inside 一个期望块?

标签: scala unit-testing apache-kafka jmockit kafka-consumer-api


【解决方案1】:

有多个 ConsumerConnector 类——我使用的一个来自错误的包。Scala 在这里没有造成任何问题。它在使用正确的 ConsumerConnector 类后起作用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-12
    • 2019-04-04
    相关资源
    最近更新 更多