【发布时间】:2009-08-28 20:59:50
【问题描述】:
我正在为我的计算机何时接收/拨打电话编写一个单元测试。
被测试的方法是处理传入/传出呼叫的事件。如果来电者不是经过批准的来电者,则呼叫被拒绝。
代码运行良好,但我真的找不到任何东西可以针对我的单元测试进行测试。问题是“我的计算机是否在通话中”的实际状态不是由我控制的。只有计算机知道当前是否接通了呼叫。
我希望有一些单元测试专家可以告诉我如何测试这个场景。我不想创建一个与我的代码无关的虚拟变量,只是为了让我的单元测试通过。
为了更具体一点,这里是我的单元测试:
private DeviceMediator deviceMediator;
private IDeviceControlForm deviceControlForm;
private IDataAccess data;
private ICallMonitor callMonitor;
// Use TestInitialize to run code before running each test
[TestInitialize()]
public void MyTestInitialize()
{
deviceControlForm = MockRepository.GenerateStub<IDeviceControlForm>();
data = MockRepository.GenerateStub<IDataAccess>();
callMonitor = MockRepository.GenerateStub<ICallMonitor>();
deviceMediator = new DeviceMediator(deviceControlForm, data)
{CallMonitor = callMonitor};
}
[TestMethod]
public void TestHandleIncomingCall()
{
//Arrange
//Act
deviceMediator.OnIncomingCall(null, new CallState(),
new CallInfoState());
//Assert
// I could not find anything to feasably test on this.
Assert.IsTrue(true);
}
这是它调用的方法:
public void OnIncomingCall(Call call, CallState callState,
CallInfoState callInfoState)
{
// See if this call is on our list of approved callers
bool callApproved = false;
foreach (PhoneContact phoneContact in Whitelist)
{
if (phoneContact.PhoneNumber == call.CallerID)
callApproved = true;
}
// If this is not an approved call then
if (!callApproved)
CallMonitor.Hangup();
}
【问题讨论】:
-
您能详细说明您的 Call、CallState 和 CallInfoState 类的作用吗?
-
在这种情况下,他们什么都不做。在真正的通话中,他们将拥有通话信息并处理通话。我使用它们是为了获取当前的呼叫者号码(我刚刚意识到我没有将其输入到我的单元测试中)。它们不会被其他任何东西读取,因此我无法使用它们来获取值(并且它们不是通过引用传递)
标签: c# visual-studio unit-testing