我正在尝试在现有代码库中隔离和测试特定类,该代码库派生自某个基础并具有我想模拟的私有类成员:
public class Derived : Base
{
protected Something<Other> _otherSomething = new Something<Other>();
}
具体来说,我想使用测试来验证Derived
引发某些事件DoSomething
以响应_otherSomething
引发ItHappened
事件。
为了实现这一点,我在我的测试项目中创建了一个MockedDerived
类,它是Derived
:
public class MockDerived : Derived
{
public Something<Other> OtherSomething
{
set { _otherSomething = value; }
}
}
我使用NSubstitute作为我的 MSTest 测试方法的一部分来模拟一个类,我想做这样的事情:
[TestMethod]
public void TestMethod1()
{
var sub = Substitute.For<Something<Other>>();
MockedDerived md = new MockedDerived();
bool wasRaised = false;
md.DoSomething += (sender, args) => wasRaised = true;
md.OtherSomething = sub;
sub.itHappened += Raise.Event<ItHappenedEventHandler<Other>>(new ItHappenedEventArgs<Other>());
Assert.IsTrue(wasRaised);
}
我遇到的困难在于Base
该类带来了相当多的包袱,即它创建了其他类的一些对象,并且这些对象具有一些计时器并最终涉及数据库。
它变得混乱。
我真正想做的就是确保这个Derived
类表现出特定的行为并按预期做出响应。
关于如何将这种Derived
行为的测试与混乱Base
及其各种成员隔离开来的任何建议?也许我只是没有看到明显的解决方案。