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

斯波克嘲笑的价值观不会延续到科特林?

公羊雅达
2023-03-14

我有Kotlin课程和Groovy/Spock测试。当我模拟一个Kotlin类并在该模拟上设置一个属性值时,它无法传递到Kotlin。

下面是一个Kotlin实体类,以及一个使用它的类:

open class TestEntity(var prop: String) {

}

class AClassUnderTest {
    fun useATestEntity(testEntity: TestEntity) {
        System.out.println("Checking it isn't null within Kotlin code: " + (testEntity.prop))
        System.out.println("Code which assumes it is not null: " + testEntity.prop.length)
    }
}

class AClassUnderTestTest extends Specification {
    def "UseATestEntity"() {
        given:
        def cut = new AClassUnderTest()
        def testEntityMock = GroovyMock(TestEntity)
        testEntityMock.getProp() >> "abc"
        System.out.println("Checking it isn't null after mocking: " + (testEntityMock.prop))

        when:
        System.out.println("Checking it isn't null during when clause: " + (testEntityMock.prop))
        cut.useATestEntity(testEntityMock)

        then:
        noExceptionThrown()
    }
}
Checking it isn't null after mocking: abc
Checking it isn't null during when clause: abc
Checking it isn't null within Kotlin code: null

Expected no exception to be thrown, but got 'java.lang.NullPointerException'

已经尝试过:

  • 使用GroovyStub()而不是GroovyMock()-没有区别
  • 使用Mock()/stub()而不是GroovyMock()-那么该属性在所有println的even Groovy(!!?)
  • 模仿“testentitymock.prop>>”而不是“testentitymock.getprop()>>”-没有区别

共有1个答案

邹坚壁
2023-03-14

已解决:属性本身也必须声明为打开:

open class TestEntity(
    open var prop: String  // <-- has to be declared open to be mockable!
) {

}
 类似资料:
  • 我在spock框架测试方面是非常新的,我没有找到任何可以找到所需信息的例子。因此,我认为最好的方法是向一个例子展示我需要拥有的东西。 > 例如。斯波克的测试类: 将数据作为域类: 现在我有了测试,并且想模拟唯一的方法。这意味着每次调用时,都需要有msg成功的对象数据,但是方法中的所有其他方法都应该正常调用。 很可以理解吗?问题是如何将服务类注入/模拟到spock测试类中?

  • 我在一个Java项目中工作,并开始使用Spock框架在Groovy中编写单元测试。但我对Spock的嘲讽功能有意见,希望有人能找出我做错了什么。 然后,我使用Spock在Groovy中编写了以下单元测试: 此测试失败如下: dofoo调用getfoo:21没有可用的foo

  • 我提到了这个答案,我该如何模拟java。时间本地日期。now()关于如何模拟我的LocalDateTime。now()调用。我基本上遵循了所有步骤,但只使用了LocalDateTime而不是LocalDate。 我的代码的功能是这样的,它应该只在一小时的第15或45分钟运行。因此,我将LOCAL\u DATE\u TIME静态变量设置为: 然后在我的@Before测试方法中,我有以下内容: 这是2

  • 我目前正在做一个小项目,作为Java测试课程的实习,我们试图看看mocking是如何工作的。 我们的目标是看到我们可以忽略我们所嘲笑的类中的错误。 正如您在Collaborateur中看到的,缺少一个“;”在System.Out之后,exercice的目标是表明嘲笑这个类可以让我们忽略这个错误。我的一些同事使用Eclipse时,使用“以JUnit形式运行”功能没有问题。 在Intellij中,我没

  • 运行jUnit时的异常 我想测试这个类,下面是测试方法 运行junit会产生以下异常

  • 我在spock和groovy的初始阶段,我试图测试一个简单的Spring启动应用程序,并获得 下面是我的java和groovy代码以及异常详细信息 TestController.java TestControllerSpec。棒极了 我确信我的代码遗漏了什么