1

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

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

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

4

2 回答 2

2

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

请参阅此 StackOverflow 帖子:什么是好的单元测试?

编辑:回答评论

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

private IUser CreateUser(string userName)
{
    var userMock = MockRepository.GenerateMock<IUser>();
    userMock.Expect(x => x.UserName).Return(userName);
    return userMock;
}
于 2013-03-01T15:27:34.213 回答
0

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

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

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

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

希望这可以帮助。

于 2013-03-02T17:02:03.523 回答