답변:
그래 넌 할수있어. 당신은 당신의 우려를 잘 분리하기 위해 조심해야합니다. 즉, 코드 숨김에서 모든 논리를 제거하여 다른 클래스에 넣어야합니다.
이를 수행하는 일반적인 두 가지 방법이 있습니다.
간단한 방법은 "시스템에서 어떤 정보를 제공합니까? 페이지에서 어떤 정보를 채워야합니까?"라는 관점에서 모든 이벤트 핸들러를 다시 생각하는 것입니다. 그런 다음 해당 변환을 수행하는 서비스 클래스를 제공하십시오.
이 경우 서비스 계층은 프레젠테이션 계층의 특성에 대해 거의 알아야합니다. 여전히 서비스에서 반환 된 데이터를 가져와 코드 숨김에 WebForm의 올바른 구성 요소를 채워야하며 이는 테스트되지 않은 상태로 유지됩니다 (적어도 단위 테스트로 통합 테스트를 수행 할 수 있음). 그러나 이것은 코드가 잘못되는 경우는 거의 없으며 논리에서 실패 할 가능성이 훨씬 큽니다.
보다 복잡하지만 효과적인 방법은 Model View Presenter 패턴 을 사용하는 것 입니다 . 우리가 그것을 시도했을 때, 우리는 Presenters가 프레임 워크에 빠르게 연결되었고 MVP를 더 많이 개발할수록 MVP가 실제로 MVC가되고 싶었지만 그럴 수 없다는 것이 더욱 분명해졌습니다.
즉, 다른 사람들은이 작업을 매우 성공적으로 수행했습니다 . 무거운 물건을 제거하는 데 사용할 수 있는 webformsmvp 프레임 워크 도 있으므로 마일리지가 다를 수 있습니다.
분명히 전체 웹 양식 페이지는 하나의 단위가 아니므로 단위 테스트를 수행 할 수 없습니다. 그러나 자동화 된 테스트를 위해 수행 할 수있는 작업이 있습니다.
질문의 "단위"부분이 누락되어 죄송합니다 ...
SeleniumHQ 는 프런트 엔드 테스트를위한 친구입니다. 블랙 박스 테스트와 같은 단위 테스트가 아닙니다. 여전히 유효한 테스트 사례를 고려해야합니다 ...
단위 웹 테스트는 회귀 버그 또는 새로운 프로젝트에 대한 일반적인 아이디어를 제공하더라도 매우 유용합니다.
상태와 관련하여 UI가 아닌 테스트와 마찬가지로 단위 테스트를 작성합니다. 테스트 시작시 데이터베이스를 지우고 시작 상태 이외의 것을 포함하지 않도록 데이터베이스를 다시 빌드합니다. 그런 다음 각 단위 테스트는 단일 페이지 또는 일반적으로 페이지의 개별 작업을 캡슐화합니다.
http://watin.org/ 는 또 다른 웹 테스트 도구이지만 C # /. NET 용입니다. 테스트를 단위 테스트로 작성하십시오.
[Test]
public void SearchForWatiNOnGoogle()
{
using (var browser = new IE("http://www.google.com"))
{
browser.TextField(Find.ByName("q")).TypeText("WatiN");
browser.Button(Find.ByName("btnG")).Click();
Assert.IsTrue(browser.ContainsText("WatiN"));
}
}
현재 IE 기반이지만 Firefox 및 Chrome에 대한 실험적인 지원이 있습니다. Javascript 상호 작용을 포함하여 수동 테스트에서 수행하는 모든 작업을 자동화 할 수 있습니다.
단순히 웹 요청이 유선 (또는 TCP 스택)을 통해 발생하기 때문에 웹 사이트를 실제로 단위 테스트 할 수는 없습니다. 따라서 테스트는 "단위 테스트"의 정의에 맞지 않으며 엔드-투-엔드 테스트 일 것입니다.
이러한 종류의 테스트에는 웹 브라우저를 실행하는 Selenium과 같은 제품군을 사용할 수 있습니다. 경고의 말 : 일반적으로 이러한 종류의 테스트는 움직이는 부분이 많기 때문에 매우 어렵고 예측할 수 없습니다!
더 흥미롭게도 웹 양식을 테스트 해야하는 이유가 조금 걱정 됩니다. 코드 뒤에 너무 많은 논리를 넣지 않았고 우연히 빈약 한 비즈니스 논리를 가지고 있습니까?
지난 5 년 동안 Jasmine은 프론트 엔드 장치 테스트를위한 핵심 도구로 부상했습니다. 종종 Node 및 npm을 사용한 자동 빌드 테스트에 통합됩니다.
https://en.wikipedia.org/wiki/Jasmine_(JavaScript_testing_framework) 당 :
Jasmine은 JavaScript를위한 오픈 소스 테스트 프레임 워크입니다. [2] JavaScript 지원 플랫폼에서 실행하고 응용 프로그램이나 IDE에 침입하지 않고 읽기 쉬운 구문을 사용하는 것을 목표로합니다. ScrewUnit, JSSpec, JSpec 및 RSpec과 같은 다른 단위 테스트 프레임 워크의 영향을 많이받습니다. [3]
Javascript에 대한 모든 언급에도 불구하고 일반 웹 양식의 단위 테스트에도 사용할 수 있습니다.
ASP.NET 사이트를 개발할 때 다음에서 장치 테스트를 실행할 수있었습니다.
아키텍처에 따라이 모든 것을 TDD 할 수 있습니다. 단위 테스트를 할 수없는 유일한 것은 마크 업 파일의 레이아웃입니다.