我有这样的:如何让课程更具可测性?
class FooGenerator:IFooGenerator {
private object _generated;
public void Generate() {
// Generating
GenerateSmallPart();
GenerateOtherSmallPart();
GenerateTinyPart();
// A lot similar
}
private void GenerateSmallPart() {
//add small part to _generated
}
private void GenerateOtherSmallPart() {
//add small part to _generated
}
private void GenerateTinyPart() {
//add small part to _generated
}
}
internal interface IFooGenerator {
void Generate();
}
在我的应用程序只能通过IFooGenerator
国际奥委会使用,但我想测试所有的子方法。
当我发现here,一种选择是提取所有子方法的类。但为什么我需要这样做。它仅在FooGenerator
中使用。
你有什么建议,我该如何让我的课更具可测试性?
据我所知,你应该测试公共API,而不是内部,所以你应该测试'IFooGenerator.Generate'并检查结果是否你期望的。但是如果你真的想测试'构建'部分,那么将'Generate'部分提取到构建器中是个好主意......? – 2013-04-10 08:07:15
由于所有这些方法都不会返回任何东西,我想知道你是怎么想测试它们的......你在使用Mocks吗?如果是这样,即使只是测试公共方法,也可以验证它们。但要小心:这很可能会造成脆弱的测试。 – 2013-04-10 08:07:16
:)是啊!开始一些黑盒子/白盒测试flamewar :) 对我来说医生是对的。 – wonko79 2013-04-10 08:11:08