2013-12-22 3 views
1

Мое приложение разработано с использованием шаблона CQRS и репозиториев, как я могу создать модульные тесты для своих классов команд без подключения к базе данных?Командный класс модульных тестов с ложным хранилищем

Мы используем Moq для создания издевательств наших репозиториев.

+0

Какая у вас логика в вашем «классе команд»? Используют ли они репозитории? Они напрямую звонят в БД? –

ответ

2

Вы должны высмеять свой уровень базы данных. Аналогично, вы также можете использовать слой Mock Repositor вместо уровня базы данных.

[TestClass] 
public class TestCommandServiceTests 
{ 
    private readonly TestService _testService; 
    private readonly ITestRepositor _testRepository; 
    private readonly Mock<IDatabaseLaye> _mock; 

    [SetUp] 
    public void Setup() 
    { 
     _mock = new Mock<IDatabaseLayer>(); 
     _testRepository = new TestRepository(_mock); 
     _testService = new TestService(_testRepository); 
    } 

    [Test] 
    public void TestMethod_ValidRequest_ShouldTestSuccessfully() 
    { 
     // Arrange 
     var request = new TestMethodRequest(); 
     this._mock.Setup(c => c.TestSPMethod(null)).Returns(1000); 

     // Act 
     var response = _testService.TestMethod(request); 

     // Assert 
     Assert.IsNotNull(response); 
     Assert.AreEqual(1000, response.Id); 
    } 
} 
1

Конечно, вы можете издеваться базу данных (и Вы даже должны, говорит учебник). Но это скоро становится очень громоздким, особенно когда сложны сложные ограничения базы данных.

На практике может быть более продуктивным иметь локальную тестовую базу данных (например, встроенную память с SQLite или MS SQL CE, если это возможно) и протестировать весь «стек сохранения» (в вашем случае: команды, репозитории И базы данных) за один раз. Это метод, рекомендованный в книге The Art of Unit Testing, и я нашел его очень полезным на практике.

Смежные вопросы