Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用TestContext在单元测试之间共享信息_C#_Unit Testing - Fatal编程技术网

C# 使用TestContext在单元测试之间共享信息

C# 使用TestContext在单元测试之间共享信息,c#,unit-testing,C#,Unit Testing,我正在编写一组单元测试来测试CRUD系统 我需要在Test1中注册一个用户,它返回一个ServiceKey 然后我需要在Test2中添加数据,我需要ServiceKey 传递服务密钥的最佳方式是什么?我试图在TestContext中设置它,但它似乎在测试之间消失了。您不应该在单元测试之间共享任何状态,这是好的单元测试的一个非常重要的属性-独立性。测试不应相互影响 请参阅此帖子: 编辑:回复评论 要共享逻辑/行为(方法),您可以将公共代码提取到helper方法中,并从不同的测试中调用它,例如创建用

我正在编写一组单元测试来测试CRUD系统

我需要在
Test1
中注册一个用户,它返回一个
ServiceKey
然后我需要在
Test2
中添加数据,我需要
ServiceKey


传递
服务密钥的最佳方式是什么?我试图在
TestContext
中设置它,但它似乎在测试之间消失了。

您不应该在单元测试之间共享任何状态,这是好的单元测试的一个非常重要的属性-
独立性。测试不应相互影响

请参阅此帖子:

编辑:回复评论

要共享逻辑/行为(方法),您可以将公共代码提取到helper方法中,并从不同的测试中调用它,例如创建用户模拟的helper方法:

private IUser CreateUser(string userName)
{
    var userMock = MockRepository.GenerateMock<IUser>();
    userMock.Expect(x => x.UserName).Return(userName);
    return userMock;
}
private IUser CreateUser(字符串用户名)
{
var userMock=MockRepository.GenerateMock();
Expect(x=>x.UserName).Return(UserName);
返回userMock;
}

单元测试的思想是每个测试检查一个功能。如果在测试之间创建依赖项,则无法确定它们是否会一直通过(它们可能以不同的顺序执行,等等)

在特定情况下,您可以做的是保持您的
Test1
不变。它只关注注册过程的功能。您不必将该
ServiceKey
保存到任何地方。只需在测试方法内部断言

对于第二个测试,您必须设置(伪造)成功运行所需的所有内容。通常情况下,遵循以下步骤是一个好主意:设置要测试的数据,对其进行操作,然后检查是否一切都按预期进行(这也为测试增加了更多的清晰度和结构)

因此,最好伪造您将在第一次测试运行中获得的
ServiceKey
。这样,控制要测试的数据也容易得多。使用模拟框架(例如vs2012中的moq或fakes)按您需要的方式安排您的数据。是一个非常轻量级的模拟框架。如果您还没有使用任何模拟实用程序,那么应该检查它


希望这有帮助。

但是我必须复制代码来测试创建用户。-我讨厌复制+粘贴代码