私はMVC4アプリケーションのテストを書いています。コントローラの動作をテストしています。タイトルで言及したように、テストはテストデータを返す代わりにサービス(WCF)にヒットします。私は、このコントローラがあります。モックされたオブジェクトまだサービスを呼び出す
public class FormController : Controller
{
public SurveyServiceClient Service { get; set; }
public SurveyDao Dao { get; set; }
public FormController(SurveyServiceClient service = null, SurveyDao dao = null)
{
this.Service = service ?? new SurveyServiceClient();
this.Dao = dao ?? new SurveyDao(Service);
}
//
// GET: /Form/
public ActionResult Index()
{
var formsList = new List<FormDataTransformContainer>();
Dao.GetForms().ForEach(form => formsList.Add(form.ToContainer()));
var model = new IndexViewModel(){forms = formsList};
return View("Index", model);
}
をそして、それは、このDAOオブジェクト使用しています:
public class SurveyDao
{
private readonly SurveyServiceClient _service;
private readonly string _authKey;
public SurveyDao(SurveyServiceClient serviceClient)
{
_service = serviceClient;
}
....
public FormContract[] GetForms()
{
var forms = _service.RetrieveAllForms();
return forms;
}
をそして、これはJustMock、GetFormsのモック()ヘルパークラスにいくつかのテストデータを返す使用して私のテストで:
を[TestClass]
public class FormControllerTest
{
private SurveyDao mockDao;
private SurveyServiceClient mockClient;
public FormControllerTest()
{
mockClient = Mock.Create<SurveyServiceClient>();
mockDao = Mock.Create<SurveyDao>(mockClient);
}
[TestMethod]
public void TestIndexAction()
{
//Arrange
var controller = new FormController(mockClient, mockDao);
Mock.Arrange(() => mockDao.GetForms()).Returns(TestHelpers.FormContractArrayHelper);
//Act
var result = controller.Index() as ViewResult;
//Assert
Assert.IsInstanceOfType(result.Model, typeof(IndexViewModel));
}
}
私の問題は、テストを実行すると、サービスがまだ呼び出されていることです。私はこれをFiddlerを使って検証し、テストをデバッグし、サービスのテストデータが入った "result"の値を調べました。
EDIT:試験は次のようになりますので、私は、[TestInitialize]機能するテストのコンストラクタを変更した
:JustMock manualは説明
[TestClass]
public class FormControllerTest
{
private SurveyDao mockDao;
private SurveyServiceClient mockClient;
[TestInitialize]
public void Initialize()
{
mockClient = Mock.Create<SurveyServiceClient>();
mockDao = Mock.Create<SurveyDao>(Behavior.Strict);
}
[TestMethod]
public void TestIndexAction()
{
//Arrange
var controller = new FormController(mockClient, mockDao);
Mock.Arrange(() => mockDao.GetForms()).Returns(TestHelpers.FormContractArrayHelper);
//Act
var result = controller.Index() as ViewResult;
//Assert
Assert.IsInstanceOfType(result.Model, typeof(IndexViewModel));
}
}
GetFormsを仮想メソッドにしないでください。 – rla4
@ rla4、なぜそれを言うのですか?模倣されたメソッドは仮想である必要がありますか? – mam8cc
です。私はJustMockに慣れていませんが、多くの模擬フレームワークはdynamixプロキシに依存しています。これは仮想メソッドを必要とする可能性があります:) – rla4