我的第一个单元测试

本文关键字:单元测试 第一个 我的 | 更新日期: 2023-09-27 18:08:05

我是单元测试的新手,刚刚为我的单词阶梯函数创建了一个小测试。

谁能告诉我,如果它看起来不错,如果这是一个正确的方法吗?

另外,是否有一种方法可以添加测试到当前项目,而不是在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");
}

我的第一个单元测试

UnitTests基本上由三部分组成:Arrange, ActAssert

我们可以清楚地看到这三个部分,

安排
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");

但是,我要强调的要点是:

  1. 不要将变量命名为f, s或任何其他名称,这些名称对于将来将要阅读测试的人来说不是直观的。

  2. 不要将您的测试方法命名为MyFirstUnitTest。方法名至少应该暴露该方法实际上在测试什么

  3. 什么是wordList ?它在哪里定义?

  4. 最后,Assert.IsTrue(test == "hit,hat,cat");不是正确的方法。你会在测试布尔返回值时用到它。要根据期望值测试给定值,请使用Assert.AreEqual(expected, actual)

看看这篇优秀的文章,可能会有一些有用的信息(链接)

你明白了,这是你的代码(但是经过修改,它实际上可以编译并通过单元测试)。

把你的单元测试方法分成3个部分(也就是3个As):

  • 安排-准备好您的数据,以便您可以测试一些方法
  • Act -执行测试
  • 断言-验证测试结果
代码:

[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可能不是你。始终为单元测试创建一个单独的项目。您正在测试的每种类型也应该在单独的单元测试文件中进行测试(所以是新的单元测试类类型)。在上面的例子中,你引用了wordLadderwordList,这让我相信你可能在你想要测试的实际类型中包含了一个单元测试,这是一个巨大的禁忌,因为你想要将单元测试代码与将编译成最终产品的实际代码完全隔离。

请参见MSDN -单元测试基础知识和安排行为断言。