내 응용 프로그램은 CQRS 패턴과 저장소를 사용하여 설계되었습니다. 데이터베이스에 연결하지 않고 명령 클래스의 단위 테스트를 만들려면 어떻게해야합니까?모의 저장소가있는 단위 테스트 명령 클래스
우리는 Moq을 사용하여 저장소의 모의물을 만듭니다.
내 응용 프로그램은 CQRS 패턴과 저장소를 사용하여 설계되었습니다. 데이터베이스에 연결하지 않고 명령 클래스의 단위 테스트를 만들려면 어떻게해야합니까?모의 저장소가있는 단위 테스트 명령 클래스
우리는 Moq을 사용하여 저장소의 모의물을 만듭니다.
데이터베이스 레이어를 조롱해야합니다. 마찬가지로 데이터베이스 레이어 대신 모조 리포지토리 레이어를 사용할 수도 있습니다. 물론
[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);
}
}
당신은 할 수 데이터베이스를 조롱 (그리고 당신도해야한다, 교과서를 말한다) . 그러나 이것은 특히 복잡한 데이터베이스 제약 조건이 작용할 때 매우 성가 시게됩니다.
실제로는 로컬 테스트 데이터베이스 (예 : 가능한 경우 SQLite 또는 MS SQL CE)를 사용하고 전체 '지속성 스택'(예 : 명령, 리포지토리 AND)에 대해 테스트하는 것이 더 생산적 일 수 있습니다 데이터베이스). 이것은 책 The Art of Unit Testing에서 권장되는 방법이며, 실제로는 매우 유용하다는 것을 알았습니다.
"명령 클래스"에 어떤 논리가 있습니까? 그들은 리포지토리를 사용합니까? DB를 직접 호출합니까? –