1

Selenium과 NUnit으로 통합 테스트를 만들 때 몇 가지 문제가 있습니다.Selenium과 NUnit을 이용한 통합 테스팅 - UI에서 DB로

ASP.NET 웹 응용 프로그램을 구동하기 위해 NUnit 테스트에서 Selenium RC를 사용하려고합니다. 실제로 테스트가 실제 사용자가 수행 할 DB의 모든 작업을 수행하기를 원합니다. 당연히 Selenium이 그 일을 한 후에 데이터베이스가 롤백 될 수 있다면 좋을 것입니다. db에 새로운 행 (기타 등등)이 포함되어 있다고 주장했습니다.

그래서, 여기에 (의사 일종의) 내가 가지고있는 설정입니다 :

TestMethod() 
{ 
    Using(new TransActionScope) 
    { 
     Selenium.StartSelenium() 
     Selenium.SelectAndClickAndDoStuffInUI() 
     AssertSomething() 
    } 
} 

는 이제 SelectAndClickAndDoStuffInUI-방법은 UI에서 주위를 클릭하고, 따라서 우리의 독점적 인 다 프레임 워크를 발생합니다. 우리의 프레임 워크는 모든 것을 db에 쓴다. 그리고 AssertSomething-method는 모든 것이 db라는 것을 주장한다. 프레임 워크는 내부에서 트랜잭션 ("필수")을 사용합니다.

모두 괜찮습니다. 맞습니까? 아니, 슬프게도. 위의 예제에서 TransActionScope는 커밋되지 않아야합니다 (txScope.Complete() - 호출). 따라서 모든 내부 트랜잭션도 롤백되어야합니다. 글쎄 그들은 그렇지 않으며 Selenium이 UI를 통해하는 모든 일은 DB에 맡기게됩니다.

나는 이것이 정말로 잘못 됐는지를 이해하려고 노력했지만, 지금까지 답을 찾지 못했습니다. 읽기, 대한

감사 (마지막으로) 여기에 실제 질문 :

TransactionScope에 다시 경우 압연 내 예와 같이되지 않는 이유는 무엇입니까?

상황과 설정에 대한 추가 정보를 기꺼이 제공합니다!

답변

3

asp 앱에 UI를 사용하고 있습니다. 즉, 테스트에서 변경 한 내용을 롤백 할 수 없습니다.

트랜잭션 범위는 자신의 프로세스에서만 작동 할 수 있습니다. 트랜잭션 관리자는 웹 인터페이스 내부에서 클릭을 취소 할 수 있습니까? 그것은 어디에도있을 수 있습니다. Selenium은 브라우저를 원격으로 제어하는 ​​것입니다.

mock 개체로 "실제"단위 테스트를 만들고 데이터베이스에 전혀 액세스하지 않아야합니다. 약간의 일반 asp 페이지로 열심히하지만,이 문제에 대한 가능한 해결책을 찾기 위해 asp.MVC를 살펴볼 수는 없습니다.

+0

고마워요! 그것은 그것을 설명했다. 당신이 그것에 대해 생각할 때 꽤 명백한 :-) 사용자 상호 작용 후 데이터베이스의 상태를 주장하기 때문에 내가 만들고자하는 테스트는 모의 객체에 의존 할 수 없습니다. 나는 이것에 관한 새롭고보다 일반적인 질문을 쓸 것이다 ... – juarola