C# Unity中的单元测试和协同程序
因此,我最近需要实现一些顺序代码执行,而unity协程似乎被谈论了很多,以实现这种效果,它确实做到了这一点。然而,它打破了我对逻辑的所有单元测试。所以为了修复它,我从调用StartCustomer的函数中取出了逻辑,然后使用反射来调用该方法,它似乎做到了这一点。这是密码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
[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())代码>由于所有功能都实现了该接口,但单元测试似乎不符合这一点,因此我求助于反射,我也不希望将逻辑公开
所以我的问题是
这是一种可以接受的测试方式吗?
如果不是,他们会是什么?
作为一个附带问题,除了协同程序,是否还有其他方法可以替代顺序操作,从而使测试更容易?什么“坏了”,不清楚协同程序是如何破坏您的测试的。您还可以考虑我现在使用的更好的集成(和免费),但主要是在单元测试窗体中,因此,为什么我使用实例化对象,它在最基本的对象上创建对象…最好的统一可以用来嘲弄游戏对象。