samedi 5 septembre 2015

How to use Moq to Mock an internal class protected method?

I have classes below:

public class TestService
{
     public void Upload()
     {
        var manager = new Manager();
        var worker = manager.CreateWorker();
        worker.DoWork();
     }
}

public class Manager
{
    public Worker CreateWork()
    {
        return new Worker();
    }
}

public class Worker()
{
     public void DoWork()
     {
        SetupEnvironment();
        //some codes here...
     }

     protected virtual void SetupEnvironment()
     {
       //some codes here ...
     }
}

I want to use Moq to create an unit test for Upload() method in TestService class, and SetupEnvironment() method of Worker should be mock up. I tried to the code below, but It doesnt' work:

[TestMethod]
public void Upload_Test()
{
        var mockWorker = new Mock<Worker>();
        mockWorker .Protected().Setup<string>("SetupEnvironment").Returns(() =>
        {
            //some dummy code here ...
        });

        var service = new TestService();
        service.Upload();
        Assert.IsTrue(true);
  } 

Anybody knows how to make the above unit test code work?

Aucun commentaire:

Enregistrer un commentaire