2015-02-12 8 views
0

У меня есть следующий контроллерMOQing контроллер в MVC

public class ProviderController : Controller 
{ 
    private static readonly IProviderRepository _repository = new ProviderRepository(); 
    private static readonly Ilogger Logger = new Logger();  

    [HttpPost] 
    public ActionResult CreateProvider(Provider provider) 
    { 
     try 
     { 
      int providerCreationSuccessful = _repository.CreateProvider(provider); 
      if (providerCreationSuccessful == 1) 
       TempData["userIntimation"] = "Provider Registered Successfully"; 

      return RedirectToAction("ShowTheListOfProviders"); 
     } 
     catch (Exception Ex) 
     { 
      Logger.Error(Ex.Message); 
      return View("Error"); 
     } 
    } 
} 

IProviderRepository выглядит следующим образом.

public interface IProviderRepository 
{ 
    List<Provider> GetListofProviders(); 

    Provider GetSingleProviderDetails(int ProviderID); 

    int CreateProvider(Provider provider); 

    int DeleteProvider(int ProviderID); 

    int UpdateProviderDetails(Provider provider); 
} 

Я должен MOQ контроллер apparently.I я предполагаю, что означает, что я ahve к MPOQ в methods.So, я создал тестовый проект с помощью следующего метода.

public class ProviderControllerTests 
{ 
    Provider _provider; 
    Mock<IProviderRepository> mockProviderRepository; 

    [TestInitialize] 
    public void InitializeTestData() 
    { 
     _provider = new Provider(); 
     mockProviderRepository = new Mock<IProviderRepository>(); 
    } 
    [TestMethod()] 
    public void repository_CreateProviderTest() 
    { 
     //Act 
     mockProviderRepository.Setup(provider => provider.CreateProvider(_provider)).Returns(1); 
     //Assert 
     throw new NotImplementedException(); 
    } 
} 

Может кто-то наставит меня о том, что именно мне нужно издеваться here.I чувствую, что я немного более чем в моей голове.

ответ

1

Вам необходимо высмеять IProviderRepository, который вы сделали.

mockProviderRepository = new Mock<IProviderRepository>(); 

Для того, чтобы не взаимодействовать с реальной базой данных вы должны следующим

[TestInitialize] 
    public void InitializeTestData() 
    { 
     _provider = new Provider(); 
     mockProviderRepository = new Mock<IProviderRepository>(); 
     _provider._repository=mockProviderRepository.Object; 

    } 

Так теперь вы можете проверить свои действия ProviderController с помощью этого высмеивал хранилища.

[TestMethod()] 
    public void repository_CreateProviderTest() 
    { 
     //Act 
     mockProviderRepository.Setup(provider => provider.CreateProvider(_provider)).Returns(1); 
     Provider provider = new Provider() {//with data}; 
     _provider.CreateProvider(Provider provider); 
     //Your Assertion 

} 
+0

Не используйте этот доступ к фактической базе данных или не издеваются над доступом к базе данных. –

+0

Извините, см. Мой отредактированный ответ. Назначив _repository в ProviderController для mockProviderRepository, он не коснется фактической базы данных. – janitha000

+0

Но нет свойства, называемого _repository в модели поставщика –