2013-12-22 46 views
1

我的應用程序使用CQRS模式和存儲庫進行設計,如何在不連接數據庫的情況下爲我的命令類創建單元測試?使用模擬存儲庫的單元測試命令類

我們使用Moq來創建我們倉庫的模擬。

+0

你在「命令類」中有什麼邏輯?他們使用知識庫嗎?他們是否直接撥打數據庫? –

回答

2

你必須模擬你的數據庫層。同樣,你也可以模擬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中推薦的方法,我發現它在實踐中非常有用。