私はMVCサイトにArea
を持っています。この領域には、通常のコントローラ/モデル/ビューの設定があります。私は、次のコードを持つコントローラとしてエリア内のViewEngineをテストするコントローラをモックする - null参照とRouteData
:
public class DocumentCreatorController : Controller
{
// GET: Templates/DocumentCreator
public ActionResult OfferTemplate(BaseDocumentViewModel data)
{
return this.Pdf(nameof(OfferTemplate), data, "File.pdf");
}
}
もののカップルを行いますが、興味深いのは、それがダウンViewEngine呼び出しに来ているthis.Pdf
方法:
var viewResult = ViewEngines.Engines.FindPartialView(controllerContext, partialViewName);
ここで私は、 とPartialViewName
とをFindPartialView
と呼んでください。私のPartialViewName
はコントローラアクションOfferTemplate
のnameof(OfferTemplate)
から来ます。私はcontrollercontext
が私の挑戦だと思う。
:
[TestMethod]
public void OfferTemplate()
{
var ctr = SetupControllerWithContext();
}
private static DocumentCreatorController SetupControllerWithContext()
{
var routeData = new RouteData();
routeData.Values.Add("controller", "DocumentCreatorController");
routeData.Values.Add("action", "OfferTemplate");
var request = new Mock<HttpRequestBase>();
request.Expect(r => r.HttpMethod).Returns("GET");
var mockHttpContext = new Mock<HttpContextBase>();
mockHttpContext.Expect(c => c.Request).Returns(request.Object);
var controllerContext = new ControllerContext(mockHttpContext.Object
, routeData, new Mock<ControllerBase>().Object);
DocumentCreatorController ctr = new DocumentCreatorController();
ctr.ControllerContext = controllerContext;
return ctr;
}
:
私はユニットテストでこれを設定したい(部品番号を使用して)、私は次のコードなどMocking The RouteData Class in System.Web.Routing for MVC applicationsやMocking Asp.net-mvc Controller Contextとしてページに基づいています次のエラーが表示されます。
Eesy.Websites.Api.Tests.Controllers.DocumentCreatorControllerTest.OfferTemplate threw exception: System.NullReferenceException: Object reference not set to an instance of an object.
これはわかりません。
マイフォルダのセットアップ:ControllerContext上
デバッグイメージFindPartialViewを呼び出す上:
誰もがアイデアを持っていますか? RouteDataを間違って設定したためですか?
'routeData.Values.Add(" controller "、" DocumentCreator ");'( "DocumentCreatorController"ではなく) –
フレームワークコードを模擬してテストしようとしています。その機能をコードに抽象化して、必要に応じて単独でテストすることができます。これは[XY問題](https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)のようです。あなたが達成しようとしている究極の目標は何ですか? – Nkosi
@Nkosi良い点。私はユニットテストを使用してPDF(HTMLからPDFへ)を自動的に生成しようとしていますので、PDF生成処理の動作を検証できます。コントローラを使用してこれを行うことを望みましたが、明らかに、これを避ける代わりにサービスを作ることが理にかなっています:-) –