gpt4 book ai didi

C# 构造函数与初始化

转载 作者:行者123 更新时间:2023-12-02 21:44:30 25 4
gpt4 key购买 nike

进行 TDD 并希望隔离被测方法:Direct();但是,当测试创建 MyClass 时,SomeClass.SetupStuff(); 会崩溃 (NotImplementedException)。因此,修改了 IMyClass 接口(interface),使其具有可以在 MyClass 构造之后调用的 Configure(); 方法,以避免异常。

问题:这是处理这种情况的可接受的方法,还是这违反了一些基本的 OOP 原则?

public class MyClass : IMyClass
{
public MyClass()
{
// class with static method that sets stuff up
SomeClass.SetupStuff();
}
public void IMyClass.Direct()
{
// want to test this
}
}

对比

public class MyClass : IMyClass
{
public MyClass()
{

}
public void IMyClass.Direct()
{
// want to test this
}
//
public void IMyClass.Configure()
{
// class with static method that sets stuff up
SomeClass.SetupStuff();
}
}

最佳答案

避免此类问题的一种方法是使用依赖注入(inject)

public class MyClass : IMyClass
{
public MyClass(ISomeClass someClass)
{
someClass.SetupStuff();
}

public void IMyClass.Direct()
{
// want to test this
}
}

通过将您的类与 SomeClass 解耦,您可以在测试期间自由提供 ISomeClass 的模拟实现,并可以在运行时提供完整的实现。

关于C# 构造函数与初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19773746/

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