我在提供的框架中编写客户端组件,并且需要能够对我的组件进行单元测试。组件是使用MVP(Model-View-Presenter)模式编写的,我想使用PEX为我的演示者自动生成单元测试。
以下是演示者的代码。
public partial class CompetitorPresenter : PresenterBase
{
private readonly ICompetitorView _view;
public IGlobalDataAccess GlobalDataAccess;
public IGlobalUI Globals;
public SystemClient Client;
public bool DeleteRecord()
{
if (_view.CompetitorName != "Daniel")
return false;
if (Client.SystemName != "Ruby")
return false;
return true;
}
}
我遇到的问题是框架提供了对象SystemClient
,我不能使用工厂类来创建SystemClient
的实例。因此,当我运行PEX以自动生成单元测试时,我必须告诉PEX忽略SystemClient
,结果是方法DeleteRecord
没有完全覆盖,因为行Client.SystemName != "Ruby"
是未经测试。
由于我有模拟对象MSystemClient
(使用moles创建),我想知道配置中的某个地方我是否可以告诉PEX使用MSystemClient
,并让PEX自动生成测试用例涵盖这种方法。
答案 0 :(得分:0)
你走在正确的轨道上。如果您无法控制创建CompetitorPresenter.Client
实例的位置,则可以为所有实例定义一个mole:
MSystemClient.AllInstances.SystemNameGet = () => "SomeName";
您的单元测试必须在“托管环境”中运行:
[HostType("Moles")]
public void TestMethod()
{
MSystemClient.AllInstances.SystemNameGet = () => "SomeName";
// Test code...
}