gpt4 book ai didi

c# - 如何在 NUnit 中测试同一类型的多个对象

转载 作者:行者123 更新时间:2023-11-28 20:36:04 25 4
gpt4 key购买 nike

我目前正在尝试第一次学习 NUnit。

对于我想使用 TDD 开发的 C# 程序,我决定编写 User类开始。这User类将(语义上)如下所示:

using System;

namespace SSH_file_drop
{
public class User
{
private Boolean authenticated = false;

public string userName = null;

//one-time object 'transmission' instance to allow single-use file transmission field
Transmission fileVehicle = null;

//property to discern whether user has been correctly authenticated
public Boolean isAuthenticated
{
get;
}

public Boolean canSend ()
{
if (authenticated)
{
return this.userType != "sender";
}
return false;
}

public User(String inputUName)
{
String userName = inputUName;
}

public static void generateUser(string userName)
{
//contact server to attempt to register new user
}

public void ChangePassword(String oldPassword, String newPassword)
{
//ask server to change user password
}

public Boolean SetUpTransmission()
{
if (canSend())
{
try
{
fileVehicle = new Transmission(this);
return true;
}
catch (e)
{
//write exception message
return false;
}
}
else
{
return false;
}
}
}
}

目前真的只是占位符代码。

为了测试User类,但是我正在尝试编写一个 TestFixture,它创建 User 类的单独实例,并以某种方式持久存储它们直到拆卸,对每个对象执行相同的测试。

我的想法是创建一个 User 的数组对象作为 TestCase 数据源以通过 [Order(<n>)] 按顺序测试所有内容属性(栏用户实例初始化测试方法),但我已经阅读了here将在运行时为其中的每个方法创建一个新的 TestFixture 实例,因此我无法以这种方式修改 Test Fixture 中的持久数据。

因为我正在尝试实现状态逻辑 - User object isAuthenticated() (并且此身份验证依赖于此后的后续测试,因为所有用户数据都被建模为存储在远程数据库中),是否有一种方法可以在不创建具有重复操作的测试(创建对象,身份验证,检查用户类型)的情况下继续进行等),因此有多个断言?

最佳答案

回答您问题中有关 NUnit 如何工作的部分...

您引用的关于 NUnit 中夹具实例的生命周期的答案具有误导性并且有点令人惊讶,因为它没有什么大的奥秘!

NUnit V2 的主要开发者 Jim Newkirk 的引述只是表达了他多么希望自己完成了 NUnit V2。他在 xUnit.net 框架中实现了这些想法,但它与 NUnit 3 无关。

NUnit 3 与 NUnit V2 一样,创建一个 TestFixture 实例,用于所有测试。您可以使用 [OneTimeSetUp] 创建要在测试中使用的对象,并将它们存储为类的成员。如果这些对象是有状态的,您应该避免对 fixture 中的测试使用并行测试执行充分利用它们。

如果需要额外的每个测试设置,那么您可以使用 [SetUp] 来达到这个目的,并使用 [TearDown] 来删除任何会对后续测试产生负面影响的更改.

您还可以指定测试的顺序,但这通常不是一个好主意,因为一个失败的测试可能会导致后续测试也失败。如果可以,尽量使每个测试独立。

另请注意,如果您希望能够针对不同类型的对象多次运行相同的夹具,参数化夹具是一个不错的选择。只需将足够的信息传递给构造函数,以便可以在一次性设置中完成正确的对象初始化。

请务必阅读文档中上述所有内容的详细信息:https://github.com/nunit/docs/wiki

关于c# - 如何在 NUnit 中测试同一类型的多个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54014951/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com