我是单元测试的新手,刚为我的单词梯功能创建了一个小测试。
任何人都可以建议它看起来是否合适以及是否是正确的做法?
另外,有没有办法在当前项目中添加测试而不是在VS2012中创建单独的单元测试项目?
[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");
}
答案 0 :(得分:0)
单元测试基本上由三部分组成:Arrange
,Act
和Assert
我们可以清楚地看到那里的所有三个部分,
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");
但是,我要强调的要点是:
不要将变量f
,s
或任何其他名称命名为对将来将会阅读该测试的人不直观的名称。
请勿将您的测试方法命名为MyFirstUnitTest
。方法名称至少应该暴露实际测试方法
什么是wordList
?它在哪里定义?
最后,Assert.IsTrue(test == "hit,hat,cat");
不是正确的做法。在测试一些布尔返回值时,您基本上会想要使用它。要针对预期值测试给定值,请使用Assert.AreEqual(expected, actual)
请查看这篇优秀的文章,了解可能有用的一些信息(Link)
答案 1 :(得分:0)
你明白了,这是你的代码(但修改后会实际编译并通过单元测试)。
将您的单元测试方法拆分为3个部分(又名3 As ):
代码:
[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
}
}
我认为最后一条评论是不言而喻的,但是因为你不熟悉.net中的单元测试可能不适合你。始终为单元测试创建单独的项目。您正在测试的每种类型也应在单独的单元测试文件中进行测试(因此新的单元测试类类型)。在上面的示例中,您引用了wordLadder
和wordList
,这让我相信您可能已经在您想要测试的实际类型中包含了一个单元测试,这对您来说是一个巨大的禁忌希望将单元测试代码与将编译到最终产品中的实际代码完全隔离。