带有void类型的单元测试方法
本文关键字:单元 测试方法 类型 void 带有 | 更新日期: 2023-09-27 18:04:58
我有一些代码如下所示,其中有多个方法调用web服务从数据库获取一些数据。这将产生一组字段,然后从web应用程序添加到另一个数据库。这一切都很好,但我不知道如何对其进行单元测试,因为它主要输出空白,以及来自数据库的数据,每次点击按钮都会发生变化。是否有一种方法来单元测试,如果方法工作与否?对不起,我对单元测试很陌生,但我知道它有多重要,所以任何帮助都会很感激。
//Get webservice service
private Service1 GetService()
{
return new TestProjectService.Service1();
}
//Choose which webservice we want to use based on radio button selection
private TestProjectService.CommandMessages GetCommand(Service1 service)
{
var command = new TestProjectService.CommandMessages();
switch (WebServiceRadio.SelectedIndex)
{
case 0:
command = service.GetData();
break;
case 1:
command = service.GetDataLINQ();
break;
}
return command;
}
//Display the results in a label on screen
private void DisplayResult(string text)
{
LatestCommandLabel.Text = text;
}
//Get the current username of the user logged in
public string GetUsername()
{
return System.Security.Principal.WindowsIdentity.GetCurrent().Name;
}
//Submit the data to the database using Linq
private void SubmitData(string username, TestProjectService.CommandMessages command)
{
var dc = new TestProjectLinqSQLDataContext();
var msg = new TestProjectCommandMessage
{
Command_Type = command.CommandType,
Command = command.Command,
DateTimeSent = command.DateTimeSent,
DateTimeCreated = command.DateTimeCreated,
Created_User = username,
Created_Dttm = DateTime.Now
};
dc.TestProjectCommandMessages.InsertOnSubmit(msg);
dc.SubmitChanges();
}
//Return the value and submit data to database
private void ReturnValue()
{
var service = GetService();
var command = GetCommand(service);
var username = GetUsername();
if (command != null)
{
DisplayResult(String.Format("Last Command Called (Using {0}) : {1}", WebServiceRadio.SelectedItem.ToString(), command.Command));
string userName = GetUsername();
SubmitData(username, command);
}
else
{
DisplayResult("No Commands Available");
}
}
//Onlick return value
protected void GetCommandButton_Click(object sender, EventArgs e)
{
ReturnValue();
}
行为验证是用于测试不返回任何值的方法的方法。
简而言之,由于方法不返回任何结果,测试所能做的唯一事情就是确保方法导致适当的操作发生。这通常是通过使用mock对象来完成的,mock对象跟踪其方法是否被调用。
为了让你的测试使用test double,你需要在你的系统设计中包含接缝。
我强烈推荐阅读Mark Seeman的《. net中的依赖注入》。因为你是单元测试的新手,毫无疑问你对单元测试的机制有很多疑问(这个答案可能会引发更多的问题)——这本书非常详细地回答了这些问题。