【发布时间】:2011-05-06 04:43:53
【问题描述】:
假设您有 2 个类,Listener 和 Talker。 Talker 有一个 Talking 事件,当这个事件被触发时,Listener 应该执行一个 void 方法 HeardTalk,大致如下:
public class Talker
{
public event EventHandler Talking;
public void Talk()
{
if (Talking != null)
{
Talking(this, null);
}
}
}
public class Listener
{
public void StartListening(Talker talker)
{
talker.Talking += HeardTalk;
}
public void HeardTalk(object sender, EventArgs e)
{
// do something private here
}
}
如果没有反映该方法被调用的公共状态,那么一旦调用了 StartListening,就会调用 HeardTalk,您将如何进行单元测试?为了验证的目的,我可以添加这样的状态,但它看起来很笨拙。理想情况下,我想以类似于 Mocking 框架所做的方式断言调用已进行,但我无法模拟被测类。
有没有一种优雅的方式来断言在 SUT 上调用了一个方法,而不只是为了可测试性而对其进行修改?
【问题讨论】:
-
我理解当您说没有公共状态可以检查是否调用了 HeardTalk,这是否意味着执行的 HeardTalk 代码不包含可以检查的副作用?
-
史蒂夫:是的,我就是这个意思。
标签: c# unit-testing events mocking