-3

我解释得更好,我正在研究如何在 C# 中使用 NUnit 和 justmock 进行单元测试。我正在阅读单元测试的艺术这本书,在这里我被告知,尽可能避免 [SetUp] 为以前的场景配置一试。但是在博客上搜索我,如果在 [SetUp] 中使用这些设置很好,我真的很困惑,我知道如果场景非常大,我的测试方法的安排会增长,我必须 rafactorizar,Entence最好的详细问题是,当使用 [SetUp] 时,或者当要测试的场景非常大并且 Arrange 代码受此影响时是否存在某种类型的模式,helpmee ???

例如:

[TestMethod]
    [Owner("Joaquin")]
    public void Update_CorrectViewDtoAndAllowedUser_ReturnsTrue()
    {
        // Arrange
        const string userName = "johndoe";
        var viewDto = new ViewDto { Id = 1 };
        var view = new View { Id = 1 };

        var authorizationService = Mock.Create<IAuthorizationService>();
        Mock.Arrange(() => authorizationService.GetAccessLevel(viewDto.Id,userName))
            .Returns(AccessLevel.ReadWrite);

        var mapper = Mock.Create<ITypeMapperService>();
        Mock.Arrange(() => mapper.Map<View>(Arg.Is(viewDto)))
            .Returns(view);

        var viewService = Mock.Create<IViewService>();
        Mock.Arrange(() => viewService.GetById(view.Id))
            .Returns(view);

        var viewAppService = CreateViewAppService(viewService, authorizationService, mapper);

        // Act
        var result = viewAppService.Update(viewDto, userName);

        // Assert
        Assert.IsTrue(result);
    }

在这里,我的安排非常广泛,我不想将其删除为私有方法或将其传递给 [SetUp] 没有模式可以以另一种方式解决此问题

4

1 回答 1

2

主要问题SetUp是,NUnit 对其中TestFixture的所有测试都使用了一个实例。对状态的更改将适用于所有单元测试。

主要问题是,单元测试没有执行顺序。剩余状态可能会破坏以下单元测试。像这样的错误很难找到。(并且可能取决于您的测试环境。您的构建服务器可以获得不同的测试结果,然后是您的本地机器)。

使用SetUp是没有问题的,只要你在TearDown.

另一种选择是使用 XUnit,它不会对所有测试使用相同的实例。是在构造函数中完成的SetUp,因为类没有被重用,所以不需要清理。

编辑:但正如您所说,您正在阅读“单元测试的艺术”。这本书几乎有一个完整的章节来讨论这个问题。并且可能会比我更好地解释这一点;)

于 2017-07-07T18:55:58.817 回答