【问题标题】:Can EasyMock object's field/property be modified by external method?EasyMock 对象的字段/属性可以通过外部方法修改吗?
【发布时间】:2020-04-27 18:10:02
【问题描述】:

假设我模拟一个具有名为“name”字段的对象,我是否能够通过外部方法而不是通过 EasyMock.expect().andReturn() 填充“name”字段,也不能EasyMock.name = “硬编码”?所以它看起来像下面这样:

var easyMock = EasyMock.createNickMock(Object)

ClassUtil.methodOne(condition, easyMock)

其中methodOne(或外部方法)包含以下实现:

methodOne(condition, object) {
    if (condition == true)
       object.name = "something"
    else
       object.name = "nothing"
}

这样做的目的是为了让我可以做如下的事情:

assertEquals(easyMock.name, "something")

从方法中出来后似乎没有保留该值。有什么想法吗?

【问题讨论】:

    标签: unit-testing easymock


    【解决方案1】:

    我不建议同时公开字段和模拟。不应模拟值类型,其他所有内容均不应公开字段。

    也就是说,它应该可以工作。这是一个工作示例:

    public class ClassWithField {
        public String name;
    }
    
    public class ClassWithFieldTest {
    
        @Test
        public void test() {
            ClassWithField c = niceMock(ClassWithField.class);
            c.name = "test";
            assertEquals("test", c.name);
        }
    
    }
    

    请注意,您甚至不需要replay(c),因为您正在处理一个字段。

    【讨论】:

    • 感谢@Henri 的回复。但是有两个问题:1)当您调试时,它是否捕获了您设置的值? 2)由于目标是代码覆盖,是否有办法将对象传递给上述“methodOne”,并让方法填充值?
    • 1) 应该。 2)同样的事情。设置值就可以了。你在哪里做并不重要。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多