C# N单元测试

C# NUnit testing

我刚开始学习 C#,想开始使用 NUnit 进行测试。我想我会从非常简单的开始并测试一个 "Hello World" 程序,只是为了让我习惯 NUnit。

这是我的代码:

HelloWorld.cs

using System;

namespace TDDHelloWorld
{
    public class HelloWorld
    {
        static void Main()
        {
        }

        public static string HelloMessage()
        {
            return "Hello World";
        }
    }
}

HelloWorldTest.cs

using Microsoft.VisualStudio.TestPlatform.TestHost;
using NUnit.Framework;
using TDDHelloWorld;

namespace HelloWorldTests 
{
    [TestFixture]
    public class HelloWorldTest
    {
        [Test]
        public void SayHelloWorld()
        {
            string expected = "Hello World";

            Assert.AreEqual(expected, HelloWorld.HelloMessage());
        }
    }
}

我有几个问题:

  1. 我的 static void Main {} 中应该有什么?
  2. 出现以下错误:

Can't get source code location for : HelloWorldTests" -

这是什么意思?

  1. 这是否正确?我对 C# 很陌生,我没有信心。

如果相关,我正在 MacBook 上使用 Visual Studio 社区。我曾尝试研究测试,但即使是最简单的测试也很难掌握。

如果有人能提供帮助,将不胜感激! :)

单元测试最具挑战性的方面之一是知道要测试什么,不测试什么。

这个挑战是微妙的——至少有一整本书(可能更多)专门讨论这个主题:单元测试的艺术 Roy Osherove。

在您的案例中,您将同时学习 C# 和单元测试,使用一个非常简单的控制台应用程序作为 'system under test'。保持简单是学习的好方法;但您应该意识到,特别是在 单元测试概念 的情况下,您将很难尝试 'project' 将这些想法转化为实际的实际实例。

不要让这阻碍您的实验和学习,因为您绝对可以在所学的基础上再接再厉。

您问的是:

What should be in my static void Main {} ?

此方法是您 'application' 的入口点。它应该调用您的 HelloMessage() 方法(因为这是您唯一的代码),我猜您想要经典的 'Hello World' 行为,所以您应该输出 HelloMessage() 返回的字符串:

Console.WriteLine( HelloMessage() );

但这与 NUnit 或单元测试毫无关系。这只是作为 C# 控制台应用程序一部分的约定。如果您的入口点没有任何代码,那么您的应用程序将不会执行任何操作。

The following error occurs: Can't get source code location for : HelloWorldTests - what does this mean?

你是在 DEBUG 还是 RELEASE 下编译? RELEASE 编译在其中没有可用的调试符号,这可能是导致此问题的原因。此外,您 可能 可以通过选择 Run Unit Tests 而不是 Debug Unit Tests 来解决此问题。试一试。

这可能是一个 Visual Studio 错误。请参考以下post看它是否适用于您正在使用的VS版本:Unable to fetch source information for Test Method

Is this even correct? I am so new to C# I don't feel confident.

这是一个非常宽泛的问题。考虑买我上面提到的那本书。找到一个已经具有全面单元测试的开源 C# 项目,然后阅读该测试代码。

这是让自己接触单元测试的思想和习语的理想方式。

请记住,犯错误是学习和建立信心的好方法。