C# 使用TestContext在单元测试之间共享信息
我正在编写一组单元测试来测试CRUD系统 我需要在C# 使用TestContext在单元测试之间共享信息,c#,unit-testing,C#,Unit Testing,我正在编写一组单元测试来测试CRUD系统 我需要在Test1中注册一个用户,它返回一个ServiceKey 然后我需要在Test2中添加数据,我需要ServiceKey 传递服务密钥的最佳方式是什么?我试图在TestContext中设置它,但它似乎在测试之间消失了。您不应该在单元测试之间共享任何状态,这是好的单元测试的一个非常重要的属性-独立性。测试不应相互影响 请参阅此帖子: 编辑:回复评论 要共享逻辑/行为(方法),您可以将公共代码提取到helper方法中,并从不同的测试中调用它,例如创建用
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)按您需要的方式安排您的数据。是一个非常轻量级的模拟框架。如果您还没有使用任何模拟实用程序,那么应该检查它
希望这有帮助。但是我必须复制代码来测试创建用户。-我讨厌复制+粘贴代码