【问题标题】:Testing a Class Library in C#在 C# 中测试类库
【发布时间】:2012-04-16 18:13:29
【问题描述】:

这是一个非常模糊(和菜鸟)的问题,但是.....如何在 C# 中测试类库? 我正在使用 nUnit 进行测试。

我想做的是测试数据库交互。输入将是一个序列化的 XML 对象,将其反序列化以针对代码进行测试,然后 XML 对象将被重新序列化并输出。

希望这能提供一些见解。我曾考虑过创建一个创建库实例的测试应用程序。我可以采取不同/更好/更有效的方法吗?

【问题讨论】:

  • 对所有答案都非常满意。谢谢大家!

标签: c# visual-studio-2010 nunit


【解决方案1】:

您必须创建一个使用 NUnit 数据注释(TestFixtureTest 等)的单独项目。然后您可以构建该项目并将创建的 DLL 加载到 Nunit 中。

就测试而言,只需像往常一样编写它们 (Arrange-Act-Assert is the more prevalent pattern)

类似的东西

[Test]
public void MethodName_CallDatabase_ObjectDeserialized()
{
    //Arrange
    var db = new db();
    //Act 
    var output = db.ExecuteCall();
    //Assert
    Assert.That(output, Is.EqualTo("123"));
}

【讨论】:

  • 创建了一个单独的test项目,后缀为.TEST。谢谢。
  • @edmastermind29 澄清一下,我认为可能仍然存在一些混淆,这是否回答了您的问题?
  • 是的。 “单独的项目”帮助了我。请参阅 Tejs 的回答,因为他提出了YourApplication.Tests,这就是我将如何实现它。
【解决方案2】:

至于方法,通常您的解决方案如下所示:

 Solution (Your Application)
    + YourApplication.Library
    + YourApplication.WebApp
    + YourApplication.Tests

测试项目是您可以添加到解决方案中的特定项目。在那里,您可以制作单元测试文件,这些文件将使用 NUnit DLL 标记它们然后运行。这意味着使用TestFixture 和这些类中的特定方法将这些类标记为Test 方法,然后它们执行您的YourApplication.Library 项目的一部分,并支持Assert 调用以验证库调用的结果。

【讨论】:

  • 对于 C# 新手但经验丰富的软件工程师来说,这非常有帮助。
【解决方案3】:

如果您真的对严谨感兴趣,这有几个部分。

  1. 熟悉 NUnit、MBUnit 或 MSTest
  2. 找出您的库与其他库、框架、工具交互的位置。编写一些测试用例,将您对其他事物应该如何表现(以及它们应该如何表现不当)的假设编入代码。安装并熟悉模拟/存根库,例如 Moq 或 Rhino.Mocks。当您的代码以不正确的方式与外部代码交互时,这些会告诉您。
  3. 如果您愿意,请编写更多测试(这些测试跨越集成和单元测试之间的界限,IMO),以连接具有相同或相似架构的真实但简单的数据库,例如 SQLite。现在,您的代码不再与根据您的期望预先编程的 mock 进行交互,但它也没有接触到完整的数据库。
  4. 集成测试。将那个东西连接到一个真正的 [非生产] 数据库。

【讨论】:

  • 还没有,但这给了我很多工作要做。谢谢。
【解决方案4】:

为此使用许多现有的单元测试框架之一。

nUnitxUnit 甚至 MSTest(许多版本的 Visual Studio 都附带)。

【讨论】:

  • 我正在使用 nUnit。如何测试类库?
  • @edmastermind29 - 与您将它用于其他事情的方式相同。添加对要测试的程序集的引用,为不同的函数编写测试并运行它们。不确定问题出在哪里,因为我主要使用 nUnit 进行类库测试。
【解决方案5】:

如果您不想创建新的测试项目,只需在现有的类库项目中添加一个新类,并为其添加 Nunit 注解 TestFixture 并在其中将测试作为方法。如下

namespace APIWorkOut
{
    [TestFixture]
    public class TestClass
    {
        [Test]
        public void getListOfUser()
        {
            API api = new API();
            var listOFUsers = api.getUsers();
            Console.Write(listOFUsers.Data.Count);
        }       
        
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-05
    • 2012-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多