我有一个使用StructureMapNancyBootstrapper的自定义Nancy Bootstrapper,但无论容器如何,问题都是一样的。
public class CustomNancyBootstrapper : StructureMapNancyBootstrapper
{
protected override void RequestStartup(IContainer container, IPipelines pipelines, NancyContext context)
{
var auth = container.GetInstance<ICustomAuth>();
auth.Authenticate(context);
}
}
我想编写一个测试来声明使用上下文来调用Authenticate ...就像这样......
[Test]
public void RequestStartup_Calls_CustomAuth_Authenticate_WithContext()
{
// set up
var mockAuthentication = new Mock<ICustomAuth>();
var mockContainer = new Mock<IContainer>();
var mockPipelines = new Mock<IPipelines>();
var context = new NancyContext();
mockContainer.Setup(x => x.GetInstance<ICustomAuth>()).Returns(mockAuthentication.Object);
// exercise
_bootstrapper.RequestStartup(_mockContainer.Object, _mockPipelines.Object, context);
// verify
mockAuthentication.Verify(x => x.Authenticate(context), Times.Once);
}
问题在于我无法调用RequestStartup,因为它受NancyBootstrapperBase中的定义保护。
protected virtual void RequestStartup(TContainer container, IPipelines pipelines, NancyContext context);
是否有适当的&#34; /&#34;官方&#34;南希方式这样做,而不创建另一个派生类,并暴露方法,因为这似乎是一个黑客?
由于
答案 0 :(得分:1)
我猜您可以使用Browser中的Nancy.Testing“伪造”该请求:
var browser = new Browser(new CustomNancyBootstrapper());
var response = browser.Get("/whatever");
有很多关于测试NancyFx应用程序的文章: http://www.marcusoft.net/2013/01/NancyTesting1.html