1)MethodName_StateUnderTest_ExpectedBehavior
Public void Sum_NegativeNumberAs1stParam_ExceptionThrown()
Public void Sum_NegativeNumberAs2ndParam_ExceptionThrown ()
Public void Sum_simpleValues_Calculated ()
Run Code Online (Sandbox Code Playgroud)
资料来源:单元测试的命名标准
2)通过下划线分离每个单词
Public void Sum_Negative_Number_As_1st_Param_Exception_Thrown()
Public void Sum_Negative_Number_As_2nd_Param_Exception_Thrown ()
Public void Sum_Simple_Values_Calculated ()
Run Code Online (Sandbox Code Playgroud)
我计划在我的团队中引入一套标准来编写单元测试.但要包括什么?
这两个帖子(单元测试命名最佳实践和单元/集成测试中文件系统依赖关系的最佳实践)给了我一些思考的东西.
我的标准中应该涵盖的其他领域应该是如何设置测试类以及如何组织它们.例如,如果您有一个名为OrderLineProcessor的类,那么应该有一个名为OrderLineProcessorTest的测试类.如果在该类上有一个名为Process()的方法,那么应该有一个名为ProcessTest的测试(可能更多来测试不同的状态).
还包括其他什么东西?
贵公司是否有单元测试标准?
编辑:我正在使用Visual Studio Team System 2008,我在C#.Net中开发
当您正在测试的类中有一个方法时,BDD命名方法非常有效.假设我们有一个具有Connect方法的Connector类:
Should_change_status_to_Connected_if_Disconnected
Run Code Online (Sandbox Code Playgroud)
漂亮吧?但是当我在一个类中有几个方法时必须命名测试时我感到困惑(我们假设我们在我们的类中添加了Disconnect方法).
我看到两种可能的解决方案 第一个是添加一个方法名称的前缀,如:
Should_change_status_to_Connected_if_Disconnected_when_Connect_was_called
Run Code Online (Sandbox Code Playgroud)
另一种方法是为您正在测试的每个方法引入嵌套测试类.
public class ConnectorTests
{
public class ConnectTests
{
public void Should_change_status_to_Connected_if_Disconnected()
{
...
}
}
public class DisconnectTests
{
public void Should_change_status_to_Disconnected_if_Connected()
{
...
}
}
}
Run Code Online (Sandbox Code Playgroud)
老实说,这两种方法都有点不合适(可能只是因为我不习惯).推荐的方式是什么?
我是单元测试的新手,也是 C# 的新手,非常感谢有关如何编写单元测试以确保 AddGrade 方法中的逻辑正常工作的帮助。所以基本上如果成绩 >=0 和 <=100 那么成绩是有效的,它将被添加,其他任何东西都不是,它应该在控制台中显示一个错误。
我看过另一篇关于在 c# 中对 if-else 语句进行单元测试的帖子,并尝试从中解决这个问题,但如果我说实话,它让我感到困惑。我环顾网上等,并尝试了很多不同的方法来尝试解决这个问题,但我发现有时很难将人们的示例应用到我的代码中,所以我认为最好只是发布我的代码并获得一些帮助,任何帮助都会不胜感激:)
我正在使用 Xunit 进行单元测试。该项目在控制台中运行。
这是带有main方法的程序类
using System;
using System.Collections.Generic;
namespace GradeBook
{
class Program
{
static void Main(string[] args)
{
var book = new Book("Dave's");
//add grade to the book
book.AddGrade(90.5);
book.AddGrade(80.5);
book.AddGrade(70.5);
book.AddGrade(60.5);
var stats = book.GetStatistics();
Console.WriteLine($"This Gradebooks name is {book.Name}");
Console.WriteLine($"The highest grade is {stats.High:N1}");
Console.WriteLine($"The lowest grade is {stats.Low:N1}");
Console.WriteLine($"The average grade is {stats.Average:N1}");//N1,N2 etc. is number of decimal places
}
}
} …Run Code Online (Sandbox Code Playgroud)