在使用MVP模式时,我有时需要调用演示者的公共方法中的私有方法,并更改视图的一些属性。在这些情况下,我如何有效地对视图的更改和私有方法的行为进行单元测试?
public void OnFileNameChanged(string fileName)
{
_settings = FirstPrivateOperation()
if (_settings == null)
{
_view.A = false;
return;
}
var config = SecondPrivateOperation();
if (config == null)
{
_view.B = true;
return;
}
_view.C = true;
}
1条答案
按热度按时间kninwzqo1#
根据您所展示的内容,一些选项包括:
1.模拟设置这些值的两个方法,
1.将
_settings
和config
甚至是提供结果的两个方法拆分到一个单独的类中(类似于配置类),并将该类的接口作为依赖项注入到任何有意义的级别。我会选择其中一个。
关于视图值,我会尝试将其分离。此代码存在一些问题。
1.您有一个
OnFileNameChanged
方法,您可能无法更改它的签名,也不会返回任何内容。因此,我将进一步分离代码。将代码从其中取出,并创建另一个您控制的方法。不要在其中添加任何视图设置。目的是覆盖逻辑并返回带有一些计算值的对象。然后,在OnFileNameChanged
中,你分配视图所需的东西。简而言之,把逻辑部分拿出来,在别的地方处理它,然后测试它。您有3个值要指派给View对象,因此请让新方法传回一个值,或包含三个值的对象,涵盖每种可能性。
你可以更进一步,用不同的方式处理私有方法。你可能想添加一个单独的类来替换它们,这样主题也更容易测试/模拟。