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

时间:2013-03-01 15:24:17

标签: c# unit-testing

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

我需要在Test1注册用户,该用户返回ServiceKey 然后,我需要在Test2中添加我需要ServiceKey

的数据

通过ServiceKey的最佳方式是什么?我尝试在TestContext中设置它,但它似乎在测试之间消失了。

2 个答案:

答案 0 :(得分:2)

你不应该在单元测试之间共享一个状态,单元测试是良好单元测试的一个非常重要的属性 - Independency。测试不应相互影响。

请参阅此StackOverflow帖子:What Makes a Good Unit Test?

编辑:回复评论

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

private IUser CreateUser(string userName)
{
    var userMock = MockRepository.GenerateMock<IUser>();
    userMock.Expect(x => x.UserName).Return(userName);
    return userMock;
}

答案 1 :(得分:0)

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

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

对于第二次测试,你必须设置(假)你需要它成功运行的一切。通常最好遵循"Arrange Act Assert"-Principle,在那里设置数据进行测试,对其进行操作,然后检查一切是否按预期工作(它还为测试增加了更多的清晰度和结构)。

因此最好假冒第一次试运行中的ServiceKey。这样,控制要测试的数据也更容易。使用模拟框架(例如moq或vs2012中的fakes)以您需要的方式排列数据。 moq是一个非常轻量级的模拟框架。如果你还没有使用任何模拟工具,你应该检查一下。

希望这会有所帮助。