使用TestContext在单元测试之间共享信息
本文关键字:共享 信息 之间 单元测试 TestContext 使用 | 更新日期: 2023-09-27 18:01:40
我正在编写一组单元测试来测试CRUD系统。
我需要在Test1
中注册一个用户-它返回一个ServiceKey
然后我需要在Test2
中添加数据,为此我需要ServiceKey
通过ServiceKey
考试的最好方法是什么?我试图在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实用程序,您应该检查一下。