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

本文关键字:共享 信息 之间 单元测试 TestContext 使用 | 更新日期: 2023-09-27 18:01:40

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

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

通过ServiceKey考试的最好方法是什么?我试图在TestContext中设置它,但它似乎在测试之间消失。

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

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

查看这个StackOverflow帖子:什么是一个好的单元测试?

编辑:回复评论

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

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

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

在你的具体情况下,你能做的是保持你的Test1不变。它只关注注册过程的功能。你不必把ServiceKey保存在任何地方。只需在测试方法中断言即可。

对于第二个测试,您必须设置(伪造)成功运行所需的一切。遵循"安排行为断言"原则通常是一个好主意,在这里您设置要测试的数据,对其进行操作,然后检查是否一切都按预期工作(它还为您的测试增加了更多的清晰度和结构)。

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