我正在更好地解释,我正在研究如何使用NUnit和justmock在C#中进行单元测试。我正在阅读本书单元测试的艺术,在这里我被告知尽可能尝试避免[SetUp]以前的场景配置。但在博客上搜索我,如果在[SetUp]中使用这些设置很好,我真的很困惑, 我知道,如果场景非常大,我的测试方法的安排会增长,我必须进行实际考验,Entonce将会提出最好的问题, 当使用[SetUp]或者当要测试的场景非常大并且编码受此影响时,如果存在某种类型的模式,请帮助???
例如:
[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]没有模式以另一种方式解决这个问题
答案 0 :(得分:2)
SetUp
的主要问题是,NUnit对其中的所有测试使用TestFixture
的一个实例。所有单元测试都可以对状态进行更改。
主要问题是,单元测试没有执行顺序。剩下的状态可以打破以下单元测试。像这样的错误很难找到。 (并且可能取决于您的测试环境。您的构建服务器可以获得不同的测试结果,然后是您的本地计算机。)
使用SetUp
没有问题,只要您重置TearDown
中所有已更改的状态即可。
另一种方法是使用XUnit,它不会对所有测试使用相同的实例。 SetUp
在构造函数中完成,因为不重用该类,所以不需要清理。