C# 我的第一个单元测试
我不熟悉单元测试,刚刚为我的word梯形图函数创建了一个小测试 有人能告诉我这看起来是否合适,这是否是一种正确的方法吗 另外,除了在VS2012中创建一个单独的单元测试项目外,是否有一种方法可以将测试添加到当前项目中C# 我的第一个单元测试,c#,unit-testing,C#,Unit Testing,我不熟悉单元测试,刚刚为我的word梯形图函数创建了一个小测试 有人能告诉我这看起来是否合适,这是否是一种正确的方法吗 另外,除了在VS2012中创建一个单独的单元测试项目外,是否有一种方法可以将测试添加到当前项目中 [TestMethod()] public void MyFirstUnitTest() { string f = "hit"; string s = "cat"; string test= ""; List<string> lst =
[TestMethod()]
public void MyFirstUnitTest()
{
string f = "hit";
string s = "cat";
string test= "";
List<string> lst = new List<string>();
test = wordLadder (wordList, f, s);
test = lst.ToArray;
Assert.IsTrue(test == "hit,hat,cat");
}
[TestMethod()]
public void MyFirstUnitTest()
{
字符串f=“hit”;
字符串s=“cat”;
字符串测试=”;
List lst=新列表();
测试=字梯(字列表,f,s);
测试=lst.ToArray;
Assert.IsTrue(test==“命中,帽子,猫”);
}
单元测试基本上由三部分组成:Arrange
、Act
和Assert
我们可以清楚地看到这三个部分
安排
断言
然而,我要强调的几点是:
f
,s
或任何其他对将来阅读测试的人来说不直观的名称
MyFirstUnitTest
。方法名称至少应该公开该方法实际上正在测试的内容
wordList
?它的定义是什么
Assert.IsTrue(test==“hit,hat,cat”)代码>不是正确的方法。在测试一些布尔返回值时,基本上需要使用它。要根据预期值测试给定值,请使用Assert.AreEqual(预期值,实际值)
看看这篇优秀的文章,了解一些可能有用的信息()单元测试基本上由三部分组成:
Arrange
、Act
和Assert
我们可以清楚地看到这三个部分
安排
断言
然而,我要强调的几点是:
f
,s
或任何其他对将来阅读测试的人来说不直观的名称
MyFirstUnitTest
。方法名称至少应该公开该方法实际上正在测试的内容
wordList
?它的定义是什么
Assert.IsTrue(test==“hit,hat,cat”)代码>不是正确的方法。在测试一些布尔返回值时,基本上需要使用它。要根据预期值测试给定值,请使用Assert.AreEqual(预期值,实际值)
看看这篇优秀的文章,了解一些可能有用的信息()你明白了,这是你的代码(但经过修改,它将实际编译并通过单元测试) 将单元测试方法分为3部分(也称为3部分):
- 安排-准备好数据,以便测试某些方法
- Act-执行测试
- 断言-验证测试结果
[TestClass]
公共类UnitTestClass{
[测试方法]
public void MyFirstUnitTest()
{
//安排
字符串f=“hit”;
字符串s=“cat”;
//act-这不是一个很好的例子,说明为什么要进行单元测试,但是OP中没有可以编译的东西,所以我们正在测试string.Join的输出
List lst=newlist(){f,“hat”,s};
var test=string.Join(“,”,lst);
//断言
Assert.AreEqual(test,“hit,hat,cat”);//如果您关心区分大小写,可以附加第三个布尔参数
}
}
最后一点我认为是不言而喻的,但由于您对.net中的单元测试还不熟悉,可能您并不这么认为。始终为单元测试创建单独的项目。您正在测试的每个类型也应该在一个单独的单元测试文件中进行测试(所以是新的单元测试类类型)。在上面的示例中,您引用了wordLadder
和wordList
,这让我相信,可能您在您想要测试的实际类型中包含了一个单元测试,这是一个巨大的禁忌,因为您想要将单元测试代码与将编译到您的最终版本中的实际代码完全隔离产品
另请参见和。您明白了,这是您的代码(但经过修改,它将实际编译并通过单元测试) 将单元测试方法分为3部分(也称为3部分):
- 安排-准备好数据,以便测试某些方法
- Act-执行测试
- 断言-验证测试结果
[TestClass]
公共类UnitTestClass{
[测试方法]
public void MyFirstUnitTest()
{
//安排
字符串f=“hit”;
字符串s=“cat”;
//act-这不是一个很好的例子,说明为什么要进行单元测试,但是OP中没有可以编译的东西,所以我们正在测试string.Join的输出
List lst=newlist(){f,“hat”,s};
var test=string.Join(“,”,lst);
//断言
Assert.AreEqual(test,“hit,hat,cat”);//如果您关心区分大小写,可以附加第三个布尔参数
}
}
最后一点我认为是不言而喻的,但由于您对.net中的单元测试还不熟悉,可能您并不这么认为。始终为单元测试创建单独的项目。您正在测试的每个类型也应该在一个单独的单元测试文件中进行测试(所以是新的单元测试类类型)。在上面的示例中,您引用了wordLadder
和wordList
,这让我相信,可能您在您想要测试的实际类型中包含了一个单元测试,这是一个巨大的禁忌,因为您想要将单元测试代码与将编译到您的最终版本中的实际代码完全隔离产品
另请参见和。目前的情况下,它不会编译。但除此之外(假设只是打字错误),它看起来有点好。但是,您应该使用
Assert.AreEqual
。此外,VS应识别所有l
string f = "hit";
string s = "cat";
string test= "";
List<string> lst = new List<string>();
test = wordLadder (wordList, f, s);
Assert.IsTrue(test == "hit,hat,cat");
[TestClass]
public class UnitTestClass {
[TestMethod]
public void MyFirstUnitTest()
{
// arrange
string f = "hit";
string s = "cat";
// act - this is not a great example of why to unit test but you had nothing in the OP that would compile so we are testing the output of string.Join
List<string> lst = new List<string>(){f, "hat", s};
var test = string.Join(",", lst);
// assert
Assert.AreEqual(test, "hit,hat,cat"); // you can append a 3rd boolean parameter if you care about case sensitivity
}
}