我有这个:
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();
}
在我的应用程序中,我仅通过 IoC 使用 IFooGenerator
,但我想测试所有这些子方法。
我发现 here ,一种选择是使用所有子方法提取类。但是为什么我需要那样做。它仅在 FooGenerator
中使用。
您有什么建议可以让我的类(class)更易于测试吗?
最佳答案
我将与您分享我通常如何处理这种情况。如果我发现我出于某种原因想要测试一些私有(private)方法(比如很难 stub 输入参数来测试所有代码流)——这对我来说通常意味着我的类的复杂性很高,我需要重构我的代码。在你的情况下(我不知道你的方法在做什么)你可以使用类似的东西:
interface IPartGenerator
{
void GeneratePart();
}
class SmallPartGenerator : IPartGenerator
{
void GeneratePart();
}
class OtherSmallPartGenerator : IPartGenerator
{
void GeneratePart();
}
class TinyPartGenerator : IPartGenerator
{
void GeneratePart();
}
class FooGenerator:IFooGenerator
{
private IPartGenerator[] partGenerators = new IPartGenerator[]
{
new SmallPartGenerator(),
new OtherSmallPartGenerator(),
new TinyPartGenerator ()
}
public void Generate()
{
foreach (var partGenerator in partGenerators)
{
partGenerator.GeneratePart();
}
}
}
现在您可以分别测试每个零件生成器。
关于c# - 如何让类更具可测性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15920253/