public class MyBaseClass
{
protected void OnSomeEvent(EventContext context)
{
SomeType = _someService.DoSomeLogic(context);
}
public SomeType SomeType { get; private set; }
}
MyBaseClass
在流程管线中触发事件时,会发挥一些魔术作用来初始化公共属性值。public class MyClass : MyBaseClass
{
public string Foo()
{
if (SomeType.SomeLogic())
throw new InvalidOpertaionException();
return "huzzah";
}
}
其他类中的流程取决于
SomeType
的初始化。如何对
MyClass.Foo()
进行单元测试?[TestMethod]
public void Foo_ReturnsHuzzah()
{
var result = new MyClass().Foo();
Assert.IsHuzzah(result);
}
最佳答案
这种类型的时间耦合(必须在调用Foo
有效之前引发该事件)通常被认为是设计缺陷,因此,我要做的第一件事是重新访问设计以确保所拥有的是正确的。
如果您不想走这条路,最简单的解决方案是使用SomeType
的Null Object实现初始化SomeType
,就像这样...
class NullSomeType : SomeType
{
public override bool SomeLogic() { return false; }
}
然后,默认将SomeType与Null对象一起放在构造函数中。
public MyBaseClass()
{
SomeType = new NullSomeType();
}
关于c# - 类依赖于基类的 protected 属性时的单元测试,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8607951/