我现在完全重写了这个,因为我正坐在我的项目前面。我仍然有理解如何正确编写测试的问题。如何在nsubstitute模拟上测试set方法
这里是一流的,我想测试:
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:预期接收CA ll匹配:
添加(IVector3Proxy,IVector3Proxy) 实际上收到没有匹配的调用。 接受1不匹配的调用(用表示不匹配的参数“*”字符): 添加(IVector3Proxy,IVector3Proxy)
我希望有人能指出我做错了还是怎么,我误用NSubstitute。我迷失在如何测试这个方法
我想我可能已经找到了我做错了,它在我使用get/set方法的VectorAdapter级别。如果我遇到任何问题,我会更新。基本上我是在每个get方法内部创建一个新的IVector3,而不是更新现有的IVector3,通过统一看起来不错,但是完全不可测试,所以它会出现 – ShaffDaddy
仍然不工作:( – ShaffDaddy