Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 测试用例中未输入方法,正常运行时有效_C#_Asp.net Mvc_Visual Studio 2015 - Fatal编程技术网

C# 测试用例中未输入方法,正常运行时有效

C# 测试用例中未输入方法,正常运行时有效,c#,asp.net-mvc,visual-studio-2015,C#,Asp.net Mvc,Visual Studio 2015,我有一个非常奇怪的问题,我不知道是什么导致了这种行为 为了简短起见,我将提供两个类的相关代码 类A有一个方法,该方法获取xml文档并将其放入XDocument对象中,它使用类B中的方法来实现此目的。然后,它使用与类B不同但类似的方法向XDocument添加一些额外的xml 出于某种原因,当我运行测试用例时,从未输入B类的第二个方法。相反,它返回null 代码如下: 从类a首次调用类B中的方法 // Get view (xml) for current supplier XDocument nav

我有一个非常奇怪的问题,我不知道是什么导致了这种行为

为了简短起见,我将提供两个类的相关代码

类A有一个方法,该方法获取xml文档并将其放入XDocument对象中,它使用类B中的方法来实现此目的。然后,它使用与类B不同但类似的方法向XDocument添加一些额外的xml

出于某种原因,当我运行测试用例时,从未输入B类的第二个方法。相反,它返回null

代码如下:

从类a首次调用类B中的方法

// Get view (xml) for current supplier
XDocument navigationView = ProductBUS.GetProductNavigationXDocument(suppID, viewName, selectedProductNavigationView);
从类a对类B中的方法的第二次调用(这是错误的一次)

(if(true)是占位符代码,将来将更改为布尔值。此值需要来自DB,此时为空。)

B类、1类和2类中的方法

public XDocument GetProductNavigationXDocument(Guid supplierID, String viewName, string selectedProductNavigationView)
{
        // TODO : implementing full scale DI
        INavigationViewFactory factory = new NavigationViewFactory();
        INavigationView navigationXml = factory.Create(NavigationViewTypes.Product);

        return navigationXml.GetNavigationXDocument(supplierID, viewName, selectedProductNavigationView);
}
第二个(从未输入)

我在方法调用之前、之上和之后以及方法内部放置断点。如果我运行应用程序,我可以通过该方法进行调试。但当我运行一些测试用例时,这些测试用例覆盖了这段代码,它们的方法调用从未被输入。相反,代码将navigationView等于null。我通过将方法的代码放在第一个类中解决了这个问题,但是我想知道为什么会出现这个问题

编辑 下面是其中一个测试用例的代码,该测试用例在测试时会导致错误行为

[TestMethod]
    public void GetProductDetailNavigationModel_ProductWith3FieldValuesAnd2Documents_MappedObjectIsNotNull()
    {
        // Arrange
        DDSInterfaceBlock.Current.IsImpersonated = false;
        Domain.Supplier supplier = new Domain.Supplier().Init();
        Domain.User user = new Domain.User().Init().Create();
        Domain.Language language = new Domain.Language().Init();
        Domain.Product product = new Domain.Product().Init().LinkSupplier(supplier);

        Domain.ProductOverview.ProductDetail productDetail = ArrangeProductDetailData(supplier, user, language, product);
        XDocument document = ArrangeXDocument(productDetail);

        ProductDetail svc = new ProductDetail();
        IProduct bus = MockRepository.GenerateStub<IProduct>();

        bus.Stub(t => t.GetProductNavigationXDocument(supplier.Id, null, string.Empty))
                       .IgnoreArguments()
                       .Return(document);

        bus.Stub(t => t.GetProductDetail(supplier.Id, user.Id, product.Id, language.Id, language.Id))
                       .IgnoreArguments()
                       .Return(productDetail);

        svc.ProductBUS = bus;

        svc.UserBUS = MockRepository.GenerateMock<BUS.Interfaces.IUser>();
        svc.UserBUS
            .Stub(t => t.CheckIfUserInPRAGroup(Guid.Empty))
            .IgnoreArguments()
            .Return(false);

        // Act
        Domain.ProductOverview.ProductDetailNavigationModel result
            = svc.GetProductDetailNavigationModel(supplier.Id, user.Id, product.Id, language.Id, language.Id);

        // Assert
        Assert.IsNotNull(result);
    }
[TestMethod]
public void GetProductDetailNavigationModel_Product with 3字段值和2文档
{
//安排
dds InterfaceBlock.Current.IsImpersonated=false;
Domain.Supplier Supplier=新Domain.Supplier().Init();
Domain.User User=new Domain.User().Init().Create();
Domain.Language Language=new Domain.Language().Init();
Domain.Product Product=new Domain.Product().Init().LinkSupplier(供应商);
Domain.ProductOverview.ProductDetail ProductDetail=安排ProductDetailData(供应商、用户、语言、产品);
XDocument document=安排XDocument(productDetail);
ProductDetail svc=新的ProductDetail();
IPProduct bus=MockRepository.GenerateSub();
bus.Stub(t=>t.GetProductNavigationXDocument(supplier.Id,null,string.Empty))
.IgnoreArguments()
.报税表(文件);
bus.Stub(t=>t.GetProductDetail(supplier.Id、user.Id、product.Id、language.Id、language.Id))
.IgnoreArguments()
.退货(产品详情);
svc.ProductBUS=总线;
svc.UserBUS=MockRepository.GenerateMock();
用户总线
.Stub(t=>t.CheckIfUserInPRAGroup(Guid.Empty))
.IgnoreArguments()
。报税表(虚假);
//表演
Domain.ProductOverview.ProductDetailNavigationModel结果
=svc.GetProductDetailNavigationModel(supplier.Id、user.Id、product.Id、language.Id、language.Id);
//断言
Assert.IsNotNull(结果);
}

可能是因为您有GetProductNavigationXDocument的存根,但没有AddOptions的sub ToNavigationMenu

是另一个程序集中的第二个类吗?是另一个命名空间。但它在另一个项目中吗?如果是这样的话,您的测试用例可能正在使用不同的版本运行。不,它是同一个项目。如果是的话,如果我也运行这个项目,它不会抛出错误吗?你有测试用例的代码吗?你在模拟任何对象吗?
public XDocument AddOptionsToNavigationMenu(XDocument menu)
{

        menu.Element(XmlNames.NodeNames.MenuItems).Add(
                new XElement(XmlNames.NodeNames.MenuItem,
                   new XAttribute(XmlNames.AttributeNames.ID, "27301D05-EBBB-4F39-AC74-B0E944F26C52"),
                   new XAttribute(XmlNames.AttributeNames.DefaultName, "Options"),
                   new XAttribute(XmlNames.AttributeNames.NameTranslationID, "9999"),
                   new XAttribute(XmlNames.AttributeNames.DisplayMode, "Options"),
                   new XElement(XmlNames.NodeNames.MenuItem,
                           new XAttribute(XmlNames.AttributeNames.ID, "27301D05-EBBB-4F39-AC74-B0E944F26C57"),
                           new XAttribute(XmlNames.AttributeNames.NameTranslationID, "9999"),
                           new XAttribute(XmlNames.AttributeNames.DefaultName, "Notifications"),
                           new XElement(XmlNames.NodeNames.Subscriptions,
                           new XElement(XmlNames.NodeNames.Subscription,
                                new XAttribute(XmlNames.AttributeNames.ID, "7"),
                                new XAttribute(XmlNames.AttributeNames.DefaultName, "Subscriptions"))))));


        return menu;
}
[TestMethod]
    public void GetProductDetailNavigationModel_ProductWith3FieldValuesAnd2Documents_MappedObjectIsNotNull()
    {
        // Arrange
        DDSInterfaceBlock.Current.IsImpersonated = false;
        Domain.Supplier supplier = new Domain.Supplier().Init();
        Domain.User user = new Domain.User().Init().Create();
        Domain.Language language = new Domain.Language().Init();
        Domain.Product product = new Domain.Product().Init().LinkSupplier(supplier);

        Domain.ProductOverview.ProductDetail productDetail = ArrangeProductDetailData(supplier, user, language, product);
        XDocument document = ArrangeXDocument(productDetail);

        ProductDetail svc = new ProductDetail();
        IProduct bus = MockRepository.GenerateStub<IProduct>();

        bus.Stub(t => t.GetProductNavigationXDocument(supplier.Id, null, string.Empty))
                       .IgnoreArguments()
                       .Return(document);

        bus.Stub(t => t.GetProductDetail(supplier.Id, user.Id, product.Id, language.Id, language.Id))
                       .IgnoreArguments()
                       .Return(productDetail);

        svc.ProductBUS = bus;

        svc.UserBUS = MockRepository.GenerateMock<BUS.Interfaces.IUser>();
        svc.UserBUS
            .Stub(t => t.CheckIfUserInPRAGroup(Guid.Empty))
            .IgnoreArguments()
            .Return(false);

        // Act
        Domain.ProductOverview.ProductDetailNavigationModel result
            = svc.GetProductDetailNavigationModel(supplier.Id, user.Id, product.Id, language.Id, language.Id);

        // Assert
        Assert.IsNotNull(result);
    }