c# - 如何设置 InputAction.CallbackContext 的新实例来测试输入?

标签 c# unity3d

我正在使用新的输入系统并调用 Unity 事件将输入传递给我的 bevaviour 脚本。这是显示通过输入进行简单移动的示例代码

public class MovementBehaviour : MonoBehaviour
{
    public void Move(InputAction.CallbackContext inputContext)
    {
        Vector2 movementDirection = inputContext.ReadValue<Vector2>();
        transform.position += new Vector3(movementDirection.x, movementDirection.y, transform.position.z);
    }
}
我想在我的单元测试中测试它,但为此我必须传入一个新的InputAction.CallbackContext .所以我的示例单元测试可能看起来像
[TestFixture]
public class MovementBehaviourTests
{
    [Test]
    public void ItShouldMove()
    {
        GameObject gameObject = new GameObject();
        MovementBehaviour movementBehaviour = gameObject.AddComponent<MovementBehaviour>();
        
        // movementBehaviour.Move(); // pass in Vector2.right
        
        Assert.AreEqual(gameObject.transform.position, Vector3.right);
    }
}
不幸的是,我无法弄清楚如何设置新实例以传入 Vector2.right输入,以便我可以测试输出。
https://docs.unity3d.com/Packages/c....InputSystem.InputAction.CallbackContext.html
我可以设置任何值属性吗?我必须执行任何操作吗?

最佳答案

您可以为 InputAction 创建一个新的类驱动程序,如下所示:
(仅测试)

public class InputActionTest Extends InputAction{
   ReadValue<Vector2>(){
        return Vector2;
   }
}


[TestFixture]
public class MovementBehaviourTests
{
    [Test]
    public void ItShouldMove()
    {
        GameObject gameObject = new GameObject();
        MovementBehaviour movementBehaviour = 
        gameObject.AddComponent<MovementBehaviour>();
        
         movementBehaviour.Move(new InputActionTest()); 
        
        Assert.AreEqual(gameObject.transform.position, Vector3.right);
    }
}
Assert.AreEqual 似乎一直是编译器错误或 False
有关更多信息,您可以搜索 stub 和驱动程序测试,或者您可以使用更强大的工具,例如 moq(模拟)对象

关于c# - 如何设置 InputAction.CallbackContext 的新实例来测试输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68453050/

相关文章:

c# - 屏幕截图后图像上的 Unity 水印

c# - 从脚本中删除组件

c# - 我如何将字符串转换为 unsigned int 32 C# 的 byte[]

C#:抛出自定义异常最佳实践

c# - 在 Windows 7 和 Vista 中为我的应用程序文件类型添加属性到详细信息 Pane

unity3d - OnCollisionEnter2D(...) 未调用

c# - 如何将点转换为本地坐标?

c# - 仅当特定攻击动画完成查询时才使对象实例化

c# - 任何好的 Silverlight Video Player 教程?

c# - 在 Visual Studio 中查找不是注释的行