ViewEninges は静的クラスであるため、RhinoMocks でモックすることはできません。あなたの最善の策は、「部分ビューレンダラー」インターフェースを作成することだと思います。インターフェイスはモック可能であるため、ビューのレンダリングの複雑さを解消できます。以下は、いくつかの簡単な疑似コードをまとめたものです。
まず、部分ビュー レンダラー インターフェースを定義します。
public interface IRenderPartialView
{
string Render(string viewName, object model);
}
次に、基本クラスの RenderPartialViewToString を IRenderPartialView.Render の実装に変更します。
public abstract class BaseController : Controller, IRenderPartialView
{
...
public string Render(string viewName, object model)
{
// same code as RenderPartialViewToString
}
}
ここで、テスト中に IRenderPartialView を挿入できるようにコントローラー コンストラクターを変更する必要がありますが、実稼働中は基本クラスのものを使用します。これは、コンストラクターのペアを使用して実現できます。
public class YourController : BaseController
{
private IRenderPartialView partialRenderer;
public YourController()
{
SetRenderer(this);
}
public YourController(IRenderPartialView partialRenderer)
{
SetRenderer(partialRenderer);
}
private void SetRenderer(IRenderPartialView partialRenderer)
{
this.partialRenderer = this;
}
}
これで、JsonAdd は部分ビュー レンダラーを呼び出すことができます。
public JsonResult JsonAdd(AddPersonViewModel AddPersonModel)
{
...
return Json(new
{
Success = true,
Message = "The person has been added!",
PartialViewHtml = partialRenderer.Render("PersonList", new PersonListViewModel {PersonList = _personList})
});
}
したがって、テスト中に をモックアウトし、IRenderPartialView
それを を受け入れるコンストラクターに送信しますIRenderPartialView
。IRenderPartialView.Render
運用中に、ASP.NET MVC が既定のコンストラクターを呼び出すと、コントローラーがレンダラーとして使用されます (基本クラス内にが実装されています)。