gpt4 book ai didi

java - 我应该在测试中的实际类里面重复代码吗

转载 作者:行者123 更新时间:2023-12-01 22:21:44 26 4
gpt4 key购买 nike

我想测试特定方法是否会产生预期结果,但要做到这一点,我还需要操作测试中的输入。

class ToTest {
public String produceResponse(String input) {
// ....
encryptedIds = encryptIds(input)
output = doStuff(input, encryptedIds)
}

public encryptIds(input) {
....
}
}

在我的测试中,我需要检查 ProduceResponse 是否确实产生了预期的响应。为此,我必须对输入中的 id 进行加密。

我的问题是:我应该在测试中重写 encryptIds (以便我对结果有更多的控制权)还是应该从类本身调用 encryptIds 。

有没有更好的方法来解决这个问题?我不喜欢在我的测试中我知道特定流程中会发生什么。

最佳答案

如果我理解正确,您希望使用已知的 cryptoIds 作为输入来测试 productResponse()

您可以在不重构代码的情况下做到这一点,但重构它可能是一个好主意,所以这就是我要解释的内容:

class ToTest {

private IdEncryptor encryptor;

public ToTest(IdEncryptor encryptor) {
this.encryptor = encryptor;
}

public String produceResponse(String input) {
String[] encryptedIds = encryptor.encryptIds(input);
return doStuff(input, encryptedIds);
}
}

现在您可以对 IdEncryptor 进行单元测试,以测试它是否根据字符串输入生成正确的加密 ID。

为了测试 ToTest 类,您可以模拟 IdEncryptor,以便无论它接收到什么输入,它都会生成您想要的 cryptoIds。例如使用mockito:

IdEncryptor mockEncryptor = mock(IdEncryptor.class);
when(mockEncryptor.encryptIds(any(String.class)).thenReturn(new String[] {"a", "b"});

ToTest toTest = new ToTest(mockEncryptor);
String response = toTest.produceResponse("input");
// expect that the response is what you expect given "a", "b" as input of doStuff()

关于java - 我应该在测试中的实际类里面重复代码吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29588169/

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