相关疑难解决方法(0)

如何在C#中进行单元测试中的MapPath

我想在单元测试中加载外部XML文件,以测试该XML上的一些处理代码.如何获取文件的路径?

通常在Web应用程序中我会这样做:

XDocument.Load(Server.MapPath("/myFile.xml"));
Run Code Online (Sandbox Code Playgroud)

但显然在我的单元测试中我没有引用Server或HttpContext,那么如何映射路径以便我不必指定完整路径?

更新:

我只想说明我实际测试的代码是针对XML解析器类的,类似于:

public static class CustomerXmlParser {
  public static Customer ParseXml(XDocument xdoc) {
    //...
  }
}
Run Code Online (Sandbox Code Playgroud)

所以为了测试这个,我需要解析一个有效的XDocument.正在测试的方法不会访问文件系统本身.我可以直接在测试代码中从String创建XDocument,但我认为从文件加载它会更容易.

c#

14
推荐指数
2
解决办法
1万
查看次数

如何使用Rhino Mocks来模拟HttpContext.Application

我是Mocking框架的新手,并已开始使用RhinoMocks来协助我的MVC App Unit Testing.

我正在使用Scott Hanselmanns MVC Mock Helper来协助模拟 HttpContext.我成功地(经过一段时间)嘲笑了我需要的一些东西,但是当谈到HttpContext的Application属性时,它已经失败了.

在我的应用程序中,我将一个对象存储在Application中,并在Controller中检索它,如:

SomeObj foo = (SomeObj)Application["fooKey"];
Run Code Online (Sandbox Code Playgroud)

这是在我的MVC应用程序中的Application_Start上创建的.

更新后的第一个答案(为清晰起见,附加代码)目前在测试设置中我做:

HttpContextBase mockHttpBase = mocks.FakeHttpContext();
controllerToTest = new SomeController();
mocks.SetFakeControllerContext(controllerToTest);


HttpApplicationStateBase appState = 
    MockRepository.GenerateStub<HttpApplicationStateBase>();

Globals tmpAppGlobals = 
    new Globals();

mockHttpBase.Expect(ctx => ctx.Application).Return(appState);
mockHttpBase.Expect(ctx => ctx.Application[Globals.GlobalsKey]).
    Return(tmpAppGlobals);
Run Code Online (Sandbox Code Playgroud)

在我的单元测试设置中,我做:

Globals tmpAppGlobals = new Globals();
controllerToTest.ControllerContext.HttpContext.
            Expect(ctx => ctx.Application[Globals.GlobalsKey]).
Return(tmpAppGlobals);
Run Code Online (Sandbox Code Playgroud)

此调用为Application对象抛出NullReference异常.

我的问题有两个:

1)这是正确的方法还是我从设计/架构的角度做错了什么?

2)为什么这不起作用?!

提前致谢.

asp.net-mvc rhino-mocks httpcontext

7
推荐指数
1
解决办法
1万
查看次数

XDocument.Load()和XDocument.Save()的测试方法

我在Visual Studio 2010中的MVC4 Web API应用程序中使用XDocument,并且不确定测试策略.

我的大多数单元测试都使用内存中的XDocument,它适用于控制器,服务和存储库测试.

但是,我有XDocument.Load(filename)和XDocument.Save(filename)场景,我想测试(使用单元测试或集成测试).

我一直在寻找以下问题\回答关于所以在这里,但我不知道如何着手.

public class PathProvider
{
   public virtual string GetPath()
   {
      return HttpContext.Current.Server.MapPath("App_Data/policies.xml")
   }
}

PathProvider pathProvider = new PathProvider();
XDocument xdoc = XDocument.Load(pathProvider.GetPath());
Run Code Online (Sandbox Code Playgroud)

所以,我得到了我现在可以模拟调用XDocument.Load(pathProvider.GetPath())的任何调用.

我应该尝试测试PathProvider的工作原理吗?如果,那么,我将如何处理这个问题?

谢谢

戴维

testing tdd mocking linq-to-xml

5
推荐指数
1
解决办法
1559
查看次数