5

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

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

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

4

5 回答 5

3

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

至于测试,只需像往常一样编写它们(Arrange-Act-Assert 是更普遍的模式

像这样的东西

[Test]
public void MethodName_CallDatabase_ObjectDeserialized()
{
    //Arrange
    var db = new db();
    //Act 
    var output = db.ExecuteCall();
    //Assert
    Assert.That(output, Is.EqualTo("123"));
}
于 2012-04-16T18:18:10.527 回答
2

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

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

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

于 2012-04-16T18:20:33.583 回答
2

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

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

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

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

于 2012-04-16T18:15:12.800 回答
0

如果您不想创建新的测试项目,只需在现有的类库项目中添加一个新类,然后向其中添加 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);
        }       
        
    }
}
于 2021-01-31T00:42:38.110 回答