禁止在单元测试期间执行方法

时间:2020-06-08 20:33:41

标签: c# unit-testing unity3d testing nunit

我正在尝试测试一个名为“ PuntuadorJuego”(GameScore)的类,该类具有方法“ PuntuarXAcertar”(PointsIfMatching),该方法调用私有方法“ Actualiza”(Update),该方法基本上可以尽可能地更新Unity界面上的得分在下面的代码中可以看到,问题在于每次我运行测试时,它都会在那里停止。我已经尝试在调用该方法的行中添加了注释,但是它行得通,但是我想知道是否还有其他方法可以防止在测试过程中调用“ Actualiza”方法,或者是否有更好的方法可以忽略与接口相关的代码测试。谢谢。

flow

PS:我正在使用C#,Visual Studio和Unity。

2 个答案:

答案 0 :(得分:0)

您要测试的代码中的混合UI调用是问题的根源。如果您是此处的游戏开发人员,请考虑进行重组,以便PuntuadorJuego仅确定得分,而不会显示任何得分。然后,其他一些代码可以同时调用PuntuadorJuegoActualiza

执行此操作的最佳方法是使用某种体系结构,该体系结构将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

相关问题