Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Unity中的单元测试和协同程序_C#_Unit Testing_Reflection_Unity3d_Coroutine - Fatal编程技术网

C# Unity中的单元测试和协同程序

C# Unity中的单元测试和协同程序,c#,unit-testing,reflection,unity3d,coroutine,C#,Unit Testing,Reflection,Unity3d,Coroutine,因此,我最近需要实现一些顺序代码执行,而unity协程似乎被谈论了很多,以实现这种效果,它确实做到了这一点。然而,它打破了我对逻辑的所有单元测试。所以为了修复它,我从调用StartCustomer的函数中取出了逻辑,然后使用反射来调用该方法,它似乎做到了这一点。这是密码 [Test] public void Teleport_ToEmptyOpenGrid( ) { WCBattleCard bCard = iMB.InstantiateObject&l

因此,我最近需要实现一些顺序代码执行,而unity协程似乎被谈论了很多,以实现这种效果,它确实做到了这一点。然而,它打破了我对逻辑的所有单元测试。所以为了修复它,我从调用StartCustomer的函数中取出了逻辑,然后使用反射来调用该方法,它似乎做到了这一点。这是密码

    [Test]
    public void Teleport_ToEmptyOpenGrid( )
    {
        WCBattleCard bCard  = iMB.InstantiateObject<WCBattleCard>();
        GridSpace gSpaceOne = iMB.InstantiateObject<GridSpace>();
        GridSpace gSpaceTwo = iMB.InstantiateObject<GridSpace>();

        TestUtility.MockGridSpace(gSpaceOne);
        TestUtility.MockGridSpace(gSpaceTwo);

        gSpaceOne.rightSpace = gSpaceTwo;
        gSpaceTwo.leftSpace = gSpaceOne;

        bCard.ability = new WCUnstableTeleport(bCard,null);

        gSpaceOne.gridExtension.CardDroppedIntoGrid(bCard);

        Assert.IsNotNull(bCard.transform.parent);
        Assert.AreNotEqual(bCard.transform.parent.gameObject, gSpaceTwo.gridExtension.transform.gameObject);

        IOnTurnStart ability = bCard.ability as IOnTurnStart;

        Assert.IsNotNull(ability);

        TestUtility.ReflectMethod<WCUnstableTeleport> ("Teleport", null, (WCUnstableTeleport)bCard.ability, BindingFlags.NonPublic | BindingFlags.Instance);

        Assert.AreNotEqual(bCard.transform.parent.gameObject, gSpaceOne.gridExtension.transform.gameObject);

        TestUtility.ReflectMethod<WCUnstableTeleport> ("Teleport", null, (WCUnstableTeleport)bCard.ability, BindingFlags.NonPublic | BindingFlags.Instance);

        Assert.AreNotEqual(bCard.transform.parent.gameObject, gSpaceTwo.gridExtension.transform.gameObject);
    }
[测试]
公共无效传送\u ToEmptyOpenGrid()
{
WCBattleCard bCard=iMB.instanceObject();
GridSpace gSpaceOne=iMB.instanceObject();
GridSpace gSpaceTwo=iMB.instanceObject();
TestUtility.MockGridSpace(gSpaceOne);
MockGridSpace(gSpaceTwo);
gSpaceOne.rightSpace=gspace2;
gspace2.leftSpace=gSpaceOne;
bCard.ability=新的WCUnstableTelopeort(bCard,空);
gSpaceOne.gridExtension.CardDroppedIntoGrid(bCard);
Assert.IsNotNull(bCard.transform.parent);
Assert.arnotequal(bCard.transform.parent.gameObject,gSpaceTwo.gridExtension.transform.gameObject);
IOnTurnStart能力=b卡能力为IOnTurnStart;
Assert.IsNotNull(能力);
TestUtility.ReflectMethod(“Teleport”,null,(wcunstableTeport)bCard.ability,BindingFlags.NonPublic | BindingFlags.Instance);
Assert.arnotequal(bCard.transform.parent.gameObject,gSpaceOne.gridExtension.transform.gameObject);
TestUtility.ReflectMethod(“Teleport”,null,(wcunstableTeport)bCard.ability,BindingFlags.NonPublic | BindingFlags.Instance);
Assert.arnotequal(bCard.transform.parent.gameObject,gSpaceTwo.gridExtension.transform.gameObject);
}
应该如何调用它是
start例程(ability.AbilityOnStart())由于所有功能都实现了该接口,但单元测试似乎不符合这一点,因此我求助于反射,我也不希望将逻辑公开

所以我的问题是

  • 这是一种可以接受的测试方式吗?
  • 如果不是,他们会是什么?

  • 作为一个附带问题,除了协同程序,是否还有其他方法可以替代顺序操作,从而使测试更容易?

    什么“坏了”,不清楚协同程序是如何破坏您的测试的。您还可以考虑我现在使用的更好的集成(和免费),但主要是在单元测试窗体中,因此,为什么我使用实例化对象,它在最基本的对象上创建对象…最好的统一可以用来嘲弄游戏对象。