gpt4 book ai didi

java - 如何在单元测试时获取新对象的句柄?

转载 作者:行者123 更新时间:2023-12-02 07:45:26 25 4
gpt4 key购买 nike

我如何测试在 SomeClass 中动态创建的 ValueObject,而不使用 PowerMock 等将其 stub ?

class ValueOBject {
private String x, y;
getters
setters
}
class SomeClass {
public void foo () {
ValueObject vo = new ValueObject();
vo.setX("some string 1");
vo.setY("some string 2");

faa(vo);
}

public void faa(ValueObject vo) {
// do some more logic on vo here
}
}


class SomeClassTest extends TestCase{
public void testFoo() {
SomeClass s = new SomeClass();
s.foo();
// HOW TO DO THIS?
verify(faa(VAlueObject that is created during foo's run));
}
}

我不想使用 PowerMockito 或类似的库来返回 MOCKED 对象!而是在执行方法 foo() 期间创建的 REAL 对象:

//    DONT WANT A MOCKED OBJECT
// @Mock
// private ValueOBject vo;
// henNew(GetEmailInformation.class).withNoArguments().thenReturn(getEmailInformation);

最佳答案

ValueObject 是内部创建的,因此它只能依赖于对象状态。您不需要测试内部结构,您只需要测试您所做的调用的副作用。

在这种情况下,您不需要测试 foo,因为您知道 foo 的作用,它只是 faa 的包装。因此,您需要测试 faa 中由全局状态和 ValueObject 输入引起的操作和副作用。

如果你想测试 foo() 是否符合你的预期,你必须测试 foo() 引起的副作用是否与 faa(expectedObject) 具有的副作用相同。

换句话说:如果 foo 和 faa 是公共(public)的,并且公共(public)接口(interface)表示 foo 是带有固定参数的 faa 的包装器,那么您需要测试 foo 是否完全按照 faa 对您期望的固定参数所做的操作。

关于java - 如何在单元测试时获取新对象的句柄?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10952957/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com