Я полностью переписываю это сейчас, когда сижу перед моим проектом. У меня все еще проблема с пониманием того, как правильно написать тест.Как проверить метод набора на nsubstitute mock
Вот класс Я пытаюсь тест:
namespace Snowball.Controllers
{
public class FollowCameraController : ICameraController
{
private ITransform player;
private ITransform camera;
private IVector3Utility utility;
private IVector3 offset;
public FollowCameraController(ITransform player, ITransform camera, IVector3Utility utility)
{
this.player = player;
this.camera = camera;
this.utility = utility;
offset = utility.Subtract(camera.Position, player.Position);
}
public void UpdateCameraPosition()
{
IVector3 playerPosition = player.Position;
IVector3 newCameraPosition = utility.Add(playerPosition, offset);
camera.Position = newCameraPosition;
}
}
}
Вот набор тестов, которые я бегу, и это единственный тест в наборе прямо сейчас, что я пытаюсь тест:
namespace FrameworkTests
{
[TestFixture]
public class FollowCameraControllerTest
{
private ITransform cameraTransformMock;
private ITransform playerTransformMock;
private IVector3Utility utilityMock;
private IVector3 offset;
private FollowCameraController sut;
[SetUp]
public void Init()
{
cameraTransformMock = Substitute.For<ITransform>();
playerTransformMock = Substitute.For<ITransform>();
utilityMock = Substitute.For<IVector3Utility>();
offset = Substitute.For<IVector3>();
utilityMock.Subtract(Arg.Any<IVector3>(), Arg.Any<IVector3>()).Returns(offset);
sut = new FollowCameraController(cameraTransformMock, playerTransformMock, utilityMock);
var temp = utilityMock.Received().Subtract(Arg.Any<IVector3>(), Arg.Any<IVector3>());
}
[Test]
public void WhenUpdateCameraIsCalledThenCameraPositionIsUpdated()
{
//var playerPosition = Substitute.For<IVector3>();
var cameraPosition = Substitute.For<IVector3>();
var playerPosition = playerTransformMock.Position;
utilityMock.Add(playerPosition, offset).Returns(cameraPosition);
//var temp = cameraTransformMock.Position;
//cameraTransformMock.Position = cameraPosition;
sut.UpdateCameraPosition();
var temp = playerTransformMock.Received().Position;
temp = utilityMock.Received().Add(playerPosition, offset);
//cameraTransformMock.Received().Position = cameraPosition;
}
}
}
Этого тест не со следующим неудачным выходом теста:
результата Сообщение: NSubstitute.Exceptions.ReceivedCallsException: Ожидаются получить ки Соответствие:
Добавить (IVector3Proxy, IVector3Proxy) Фактически не было получено соответствующих вызовов. Поступила 1 несовпадающих вызов (аргументы, не совпадающие, отмеченные «*» символов): Добавить (IVector3Proxy, IVector3Proxy)
Я надеюсь кто-то может указать на то, что я сделал неправильно или как я злоупотребляя NSubstitute. Я теряюсь о том, как проверить этот метод
Я думаю, что я мог бы узнал, что я делал неправильно, и это было на уровне VectorAdapter, где я использую методы get/set. Я буду обновлять, если у меня возникнут проблемы. По сути, я создавал новый IVector3 внутри каждого метода get вместо того, чтобы просто обновлять exector IVector3, выглядел хорошо через единство, но был абсолютно неустойчивым или так выглядел – ShaffDaddy
Все еще не работает :( – ShaffDaddy