Метод имитационного класса внутри контроллера с MOQ - PullRequest
0 голосов
/ 22 июля 2011

Используя приведенный ниже пример кода, как я могу использовать MOQ для насмешки (ссылающегося на dll) метода класса

    [TestMethod]
    public void SampleTestMethod()
    {
        var _controller = new MyController();

        var stub = new Mock<class1>();
        stub.Setup(x => x.DoSomething(It.IsAny<int>())).Returns(2);
        //var retval = stub.Object.DoSomething();

        var result = _controller.MyAction() as ViewResult;
        stub.Verify(x => x.DoSomething(It.IsAny<int>()), Times.AtLeastOnce(), "Didn't call DoSomething");
    }//end test


//Controller
public class MyController{
 public MyController(){}

 public virtual ActionResult MyAction(){
  var ret = new class1();
  var result = ret.DoSomething(10);

  //rest of code  

  return View();

 }

}

//external class
public class class1
{
        public virtual int DoSomething(int i)
        {
            return 1;
        }
}

1 Ответ

2 голосов
/ 22 июля 2011

Вам нужно будет внедрить экземпляр внешнего класса 'class1' в конструктор вашего контроллера.Затем вы можете использовать Moq, чтобы высмеивать его и вводить в поддельный.Как то так:

public class MyController{
    private readonly IClass1 _class1;
    public MyController(IClass1 class1){
        _class1 = class1;
    }
    // Other code uses this private instance
}

[TestMethod]
public void Test(){
    var class1 = new Mock<Class1>();
    var controller = new MyController(class1.Object);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...