최근에 NUnit을 사용하여 Rhino Mock을 시작했습니다. 이제 C# 프로젝트에서 사용할 준비가되었습니다.C#과 NUnit 단위 테스팅 라이브러리
프로젝트에는 필자가 작성해야하는 데이터베이스 라이브러리가 포함되어 있습니다.
나는이 테스트가 독립적이어야하며 서로 또는 테스트 실행 순서에 의존하지 말아야한다는 것을 읽었습니다.
그래서 FTP 또는 데이터베이스 연결을 확인하려고한다고 가정합니다. 내가 행을 삽입과 같은 일부 데이터베이스 기능을 테스트 포함 할 수
[Test]
public void OpenDatabaseConnection_ValidConnection_ReturnsTrue()
{
SomeDataBase db = new SomeDataBaseLibrary(...);
bool connectionOk = db.Open();
Assert.IsTrue(connectionOk);
}
또 다른 시험처럼 작성할 수 있습니다.
[Test]
public void InsertData_ValidData_NoExceptions()
{
SomeDataBase db = new SomeDataBaseLibrary(...);
db.Open();
db.InsertSomeRow("valid data", ...);
}
나는이 몇 가지 문제를 참조하십시오
1) 문제는 마지막 시험, 첫 번째 테스트에 독립하기 위해, 다시 데이터베이스 연결을 열어야 할 것입니다. (연결을 열기 전에 다시 연결을 닫는 첫 번째 테스트가 필요합니다.) 2) 또 다른 한 가지는 SomeDataBaseLibrary가 변경되면 모든 테스트 메소드도 변경되어야한다는 것입니다.
3) 테스트가 실행될 때마다 이러한 모든 연결이 설정되어야 테스트 속도가 저하됩니다.
일반적으로 어떻게 처리합니까?
나는 DataBaseLibrary의 mock을 사용할 수 있다는 것을 알고 있지만, 프로젝트에서 내 첫 번째 목표 인 라이브러리 자체를 테스트하지는 않습니다.
이들은 단위 테스트가 아니라 통합 테스트입니다. 그것들은 테스트중인 장치 외부의 소프트웨어 및 구성에 의존합니다. –
그래서 그들은 대신 조롱 받아야합니까? – lejon
데이터 액세스 레이어를 테스트하기 위해 데이터베이스를 조롱하는 좋은 방법이 있다면 찾아보십시오. 네가 그렇게하지 않으면 나는 그것에 대해 걱정하지 않을 것이다. 실제 데이터베이스로 테스트 할 때 심각한 단점이 있지만 대처할 수 있습니다. IMO를 사용하면 실제 데이터베이스와의 통합 테스트를 작성하는 것이 데이터베이스를 조롱하여 실제 단위 테스트를 작성하는 것보다 쉽기 때문에 먼저 더 쉬운 기술부터 시작하겠습니다. – apollodude217