gpt4 book ai didi

java - 当组件已经测试时测试复合对象 ->冗余?

转载 作者:搜寻专家 更新时间:2023-11-01 03:27:32 28 4
gpt4 key购买 nike

我有一个用具体示例说明的一般性问题。当所有组件对象都已测试时,您建议对复合对象进行多少测试?

作为具体示例,请考虑下面的 NullTerminatedStringReader。它从字节缓冲区中读取一个空终止字符串。为此,它使用 Javas 字符集解码器。

我当然想测试我的 NullTerminatedStringReader。它应该能够读取各种字符串,如 UTF8、UTF16、ASCII 等。

想象一下,我已经编写了 CharsetDecoder 并测试了它可以从各种可能的字符集中解码字符。它确实经过了很好的测试和尝试,我毫不怀疑它是有效的。现在我编写了一个使用 CharsetDecoder 的 NullTerminatedStringReader。理论上,我希望 NullTerminatedStringReader 能够处理 CharsetDecoder 可以解码的所有字符集字符串。如果我使用 TDD,我会想要驱动我的设计,所以我会编写大量测试来测试 NullTerminatedStringReader 的每个字符集解码:

...
void testNullTerminatedStringReaderCanDecodeUTF8String()
void testNullTerminatedStringReaderCanDecodeASCIIString()
...

但这似乎是多余的,因为在对 CharsetDecoder 的测试中,我进行了所有这些测试:

...
void testCharsetDecoderCanDecodeUTF8Char()
void testCharsetDecoderCanDecodeASCIIChar()
...

我不确定在这里做什么,因为没有 NullTerminatedStringReader 的测试,我如何才能驱动它的设计以支持所有这些解码?我是否在 NullTerminatedStringReader 的错误级别上进行了测试?如果我不进行测试,它似乎也缺少一些东西,因为理论上我知道 NullTerminatedStringReader 正在使用 CharsetDecoder 并且我知道它所做的只是附加字符以形成一个字符串,所以这里不会出错。如果 CharsetDecoder 有效,NullTerminatedStringReader 也应该有效。但是,如果它不使用 CharsetDecoder 怎么办——我认为更清楚的是假设不了解 NullTerminatedStringReader 的实现然后编写测试,但是这会导致看起来像是冗余测试.. dillema?你打赌。

class NullTerminatedStringReader
{
private Charset charset;

public String read(ByteBuffer buffer)
{
StringBuilder sb = new StringBuilder();
while (true)
{
char charVal = readChar(buffer, charset.newDecoder()); // unicode char, possibly span several bytes
if (charVal == '\0')
break;
sb.append(charVal);
}

return sb.toString();
}

private char readChar(ByteBuffer buffer, CharsetDecoder decoder) {...}
}

最佳答案

在测试复合对象时,我通常只测试两件事:

  • 它是否支持其设计的复合端到端用例?
  • 复合对象添加的任何增量功能是否有效?

一般来说,我不会尝试全面测试子对象,因为它们应该有自己的测试用例来进行测试。也就是说,您应该假设您自己的子对象可以正常工作,就像您假设 java.util.ArrayList 可以正常工作一样。

因此,在您的 NullTerminatedStringReader 示例中,我可能只会测试它是否适用于一个或两个替代字符集(即证明它正在调用正确的 CharsetDecoder)并相信 CharsetDecoder 已经过充分测试可以正常工作其他字符集。

关于java - 当组件已经测试时测试复合对象 ->冗余?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9555313/

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