【问题标题】:moq No setups configured error, how to quickly add a setup properly起订量没有设置配置错误,如何快速正确添加设置
【发布时间】:2011-12-01 19:17:48
【问题描述】:

我有一个最小起订量的单元测试,其中我收到一个错误,我需要进行设置,我确实看到了示例,但一切都如此不同,以至于我想做一个正确的最小起订量设置

错误:“预期在模拟上至少调用一次,但从未执行过:调用 => 调用.SetWidgetResponseResponseData("searchType", It.IsAny()) 未配置任何设置。”

这三个测试都失败了

[TestMethod]
public void it_should_call_set_response_response_data_on_the_view_reccount()
{
   view.Verify(called => called.SetWidgetResponseResponseData("recCount",It.IsAny<string>()));
}

[TestMethod]
public void it_should_call_set_response_response_data_on_the_view_searchtype()
{
  view.Verify(called => called.SetWidgetResponseResponseData("searchType", It.IsAny<string>()));
}

[TestMethod]
public void it_should_call_set_response_response_data_on_the_view_isgeosearch()
{
  view.Verify(called => called.SetWidgetResponseResponseData("isGEOSearch", It.IsAny<bool>()));
}

我认为这个错误是因为“res”需要用 moq 来模拟,对吗?

if (res != null && res.Count > 0)
{ 

    View.SetWidgetResponseResponseData("recCount", res.Count.ToString());
    View.SetWidgetResponseResponseData("searchType", provFacSearchCrt.SearchType);
    View.SetWidgetResponseResponseData("isGEOSearch", provFacSearchCrt.IsGeoSearch);
}

更新

   public abstract class ProviderSearchPresenterContext :   Specification<Tc.Cbc.Presentation.ProviderSearchPresenter>
{
    protected Mock<ICESBaseWidgetView> view = new Mock<ICESBaseWidgetView>();
    protected Mock<ILookupServiceManager> lookupService = new Mock<ILookupServiceManager>(MockBehavior.Loose);
    protected Mock<ICAPProviderService> capProvider = new Mock<ICAPProviderService>(MockBehavior.Loose);
    protected Mock<IProviderFacilityServiceManager> prvFacServiceMgr = new Mock<IProviderFacilityServiceManager>(MockBehavior.Loose);
    //protected Mock<ProviderFacilitySearchCriteria> provFacSearchCrt = new Mock<ProviderFacilitySearchCriteria>(MockBehavior.Loose);
    protected Mock<ICESTraceManager> traceManager = new Mock<ICESTraceManager>();
    protected Mock<ILogger> logger = new Mock<ILogger>();
    protected Mock<IResourcesHelper> resources = new Mock<IResourcesHelper>();
    protected Mock<IUserContext> userContext = new Mock<IUserContext>();

    protected NameValueCollection QueryString = new NameValueCollection();
    protected NameValueCollection Form = new NameValueCollection();
    protected Dictionary<string, string> MethodArguments = new Dictionary<string, string>();

    protected override Tc.CES.Presentation.ProviderSearchPresenter construct()
    {
        //capProvider.Setup(x => x.GetProvider(It.Is<GetProviderReqMsg>(y => y.GetProvider.ProviderSystemIDs[0].SystemIDName == CESConstants.PROVIDER_ID 
        //    && y.GetProvider.ProviderSystemIDs[0].SystemIDValue == CESConstants.TZCOMMON))).Returns(new GetProviderRespMsg { 

        var presenter = new Tc.CES.Presentation.ProviderSearchPresenter(view.Object, traceManager.Object, logger.Object, resources.Object, 
            userContext.Object, lookupService.Object, capProvider.Object, prvFacServiceMgr.Object);
        presenter.QueryString = QueryString;
        presenter.Form = Form;
        presenter.MethodArguments = MethodArguments;
        return presenter;
    }

    protected override void given() { }

    protected override void when()
    {
        QueryString["ProFacSearch"] = "FACILITY";
        sut.ShowProviderSearch(null, null);
    }
}

规范类如下所示:

[TestClass]
public abstract class Specification<SUT>
{
    protected SUT sut;

    [TestInitialize]
    public void Initialize()
    {
        sut = construct();

        given();

        when();
    }

    protected abstract SUT construct();
    protected abstract void given();
    protected abstract void when();
}

【问题讨论】:

  • 如果“view”是一个模拟对象,那么你所做的所有测试就是调用一个模拟对象。模拟对象通常用于存根外部依赖项。你到底想测试什么?
  • 能否请您发布所有代码(TestInitialize)或至少在您创建视图对象的位置发布?您的测试方法还应该包含调用非模拟代码的代码。你的测试真的是这一行吗?

标签: c# visual-studio unit-testing moq mstest


【解决方案1】:

好的,我修好了。我添加了这样的设置:

this.prvFacServiceMgr.Setup(call =>     call.SearchProviderFacility(It.IsAny<ProviderFacilitySearchCriteria>())).Returns(new List<ProviderFacilitySearchResult>() 
        { 
            new ProviderFacilitySearchResult()
            { 
                ProviderName="TestProvider"
            } 
        });

【讨论】:

    猜你喜欢
    • 2023-03-17
    • 2010-11-06
    • 1970-01-01
    • 1970-01-01
    • 2011-05-01
    • 2016-06-16
    • 2012-08-26
    • 1970-01-01
    • 2021-12-14
    相关资源
    最近更新 更多