C# N单元测试

标签 c# testing nunit

我刚开始学习 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 Community。我曾尝试研究测试,但即使是最简单的测试也很难掌握。

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

最佳答案

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

这个挑战是微妙的——至少有一整本书(可能更多)专门讨论这个主题:The Art of Unit Testing by Roy Osherove。

在您的案例中,您将同时学习 C# 和单元测试,使用一个非常简单的控制台应用程序作为“被测系统”。保持简单是学习的好方法;但您应该意识到,特别是在单元测试概念的情况下,您将难以尝试将这些想法“转换”到实际的现实世界实例中。

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

你问:

What should be in my static void Main {} ?

此方法是您“应用程序”的入口点。它应该调用你的 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 错误。请引用以下帖子以查看它是否适用于您正在使用的 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# 项目,然后阅读该测试代码。

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

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

关于C# N单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57280123/

相关文章:

c# - 如何在 Application_EndRequest 中获取 RouteData

android - 意式 Espresso android facebook 登录

c# - 如何模拟DbSet的Include方法?

c# - 使用私有(private) nunit 测试不要重复自己

c# - 在 Entity Framework 中动态加载 SQL 表

c# - asp.net 图表控件显示不正确的工具提示日期时间值

unit-testing - 哪些测试场景对于详尽黑盒测试定期预约模型是必要且充分的?

c++ - Windows C++ 单元测试 : testing dll-exported class

c# - 你应该如何使用 NUnit 3.2?

c# - 如何使用 PrincipalContext 连接到本地主机?