首页 > 解决方案 > EasyMock 对象的字段/属性可以通过外部方法修改吗?

问题描述

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

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-testingeasymock

解决方案


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

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

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)因为您正在处理一个字段。


推荐阅读