2
做TDD并希望隔离被测方法:Direct();
然而,当测试创建MyClass
,SomeClass.SetupStuff();
炸掉(NotImplementedException
)。因此,将IMyClass
接口修改为具有Configure();
方法,可以在MyClass
构造之后调用该方法以避免该异常。c#构造函数与初始化
问题:这是处理这种情况的一种可接受的方式,或者是否存在一些基本的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
}
}
VS
避免此类问题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();
}
}
在实例方法中设置静态数据对我来说似乎很奇怪。 – Tilak
这有点令人困惑。如果你正在做TDD,那么这意味着你的测试*应该失败*直到你实现需要实现的东西。如果你还没有实现'SomeClass.SetupStuff',那么你需要实现它才能通过测试。我想我只是不明白这里的问题。将代码移回'.ctor'并实现该方法。繁荣,测试通过。 –
为什么不通过构造函数注入SomeClass。不要让它变成静态的。而不仅仅是为了你的测试而嘲笑它。你的课目前依赖于SomeClass。你想测试Direct()而不是SomeClass – Sean