Я реорганизовал некоторые тесты в своем решении с MSTest на xUnit. Несмотря на то, что все мои тесты прошли с использованием MSTest, были сделаны некоторые изменения, которые заставили меня задуматься о том, как все легко проходило во время моего рефакторинга.
Я поставил противоречивые утверждения в конце теста и отладил. Хотя результат выглядел так, как я хотел, чтобы он выглядел (объект был нулевым), он прошел оба утверждения. Как это возможно? Что я делаю не так?
Вот мой тест. Именование изменено, потому что это код, над которым я работаю на работе, но изменения заканчиваются простой заменой слов. Я добавил комментарии, чтобы показать некоторые из моих намерений, а также то, что произошло, когда я отлаживал тест.
using AutoFixture.Xunit;
using Moq;
using My.Core.Project.Interfaces;
using My.Core.Project].Models;
using My.UI.Project.Factories.Sidebar;
using System;
using System.Threading.Tasks;
using Xunit;
using Xunit.Extensions;
[Theory, AutoData]
public async Task GetReturnedObject_NoReturnedObject_EmptyResult(Guid returnedObjectIdentifier, ReturnedObjectType setupObject)
{
//Arrange
var mockServiceClient = new Mock<IServiceClient>(MockBehavior.Strict);
var returnedObjectIdentifierParameter = returnedObjectIdentifier.ToString(); //Parse logic in the method exists, so I had to make sure the input was not just any string
setupObject = null; //I want the search in the method to not find anything.
mockServiceClient.Setup(c => c.GetReturnedObjectById(It.IsAny<Guid>())).ReturnsAsync(setupObject);
var factory = new Factory();
//Act
var returnedObject = await factory.GetReturnedObject(mockServiceClient.Object, returnedObjectIdentifierParameter); //returnedObject is NULL.
//Assert
Assert.Null(returnedObject); //Hovered over returnedObject. It's NULL.
Assert.NotNull(returnedObject); //Hovered over returnedObject, again. Still NULL. THIS SHOULD FAIL!
}