gpt4 book ai didi

c# - 如何让类更具可测性?

转载 作者:太空狗 更新时间:2023-10-29 21:50:46 27 4
gpt4 key购买 nike

我有这个:

 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/

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