我正在尝试测试一个名为“ PuntuadorJuego”(GameScore)的类,该类具有方法“ PuntuarXAcertar”(PointsIfMatching),该方法调用私有方法“ Actualiza”(Update),该方法基本上可以尽可能地更新Unity界面上的得分在下面的代码中可以看到,问题在于每次我运行测试时,它都会在那里停止。我已经尝试在调用该方法的行中添加了注释,但是它行得通,但是我想知道是否还有其他方法可以防止在测试过程中调用“ Actualiza”方法,或者是否有更好的方法可以忽略与接口相关的代码测试。谢谢。
flow
PS:我正在使用C#,Visual Studio和Unity。
答案 0 :(得分:0)
您要测试的代码中的混合UI调用是问题的根源。如果您是此处的游戏开发人员,请考虑进行重组,以便PuntuadorJuego
仅确定得分,而不会显示任何得分。然后,其他一些代码可以同时调用PuntuadorJuego
和Actualiza
。
执行此操作的最佳方法是使用某种体系结构,该体系结构将UI内容分隔开,例如MVC,MVP,MVVM。我不熟悉Unity,但是如果我想阅读它们,那么使用Google搜索“ Unity3d MVC”,“ Unity3d MVP”和“ Unity3d MVVM”可以给我几天的参考时间。 :-)
顺便说一句...传统上,MVP是指模型视图呈现器。我确实找到了一些带有MVP的Unity文章,它们的含义有所不同,所以请当心。
答案 1 :(得分:0)
在Unity中使用测试程序文件夹时,默认情况下,Unity定义了名为UNITY_INCLUDE_TESTS
的编译器约束。您可以将其与#if
/#else
/#endif
预处理程序指令一起使用,以仅在运行测试时包括代码。例如:
public void MyMethod()
{
#if UNITY_INCLUDE_TESTS
// Test specific code
#else
// Production specific code
#endif
}
这是一个非常简单的解决方案,但是请谨慎使用此方法,因为如果在测试过程中排除了代码,则该代码不会被测试!确保您调查了Actualiza
方法导致错误的原因。
已经建议的另一种方法是使用模拟框架,例如 Moq 或 NSubstitute 。