C# 我的第一个单元测试

C# 我的第一个单元测试,c#,unit-testing,C#,Unit Testing,我不熟悉单元测试,刚刚为我的word梯形图函数创建了一个小测试 有人能告诉我这看起来是否合适,这是否是一种正确的方法吗 另外,除了在VS2012中创建一个单独的单元测试项目外,是否有一种方法可以将测试添加到当前项目中 [TestMethod()] public void MyFirstUnitTest() { string f = "hit"; string s = "cat"; string test= ""; List<string> lst =

我不熟悉单元测试,刚刚为我的word梯形图函数创建了一个小测试

有人能告诉我这看起来是否合适,这是否是一种正确的方法吗

另外,除了在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");
}
[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
        }
    }