─━ IT ━─

NUnit Asp의 고급 사용법

DKel 2021. 8. 16. 00:44
반응형
처음에 개발 시에 얼마나 기존의 코드에 버그가 섞이지 않게 하는가는 지금까지 쭉 큰 과제로 여겨져 왔다.그러나 오늘날 테스트 구동형 개발(Test Driven Development:TDD)이라고 하는 새로운 방법에 의해, 이 상황은 변화하고 있다.TDD의 주된 원칙은 다음 2가지이다.자동 테스트가 실패하지 않는 한 한 줄도 코드를 쓰지 않는다
중복을 피하는 이 원칙은 대체로 이치에 맞다.많은 자동 테스트를 버튼 클릭이나 커맨드 라인에서 실행하고 싶어하는 개발자는 많다.그 것에 의해서 애플리케이션의 정상적인 동작을 보증할 수 있기 때문이다.자동 단체 테스트 실행용 체제를 실현하는 NUnit라는 오픈 소스 툴도 있다.이 툴은 데이터 구조를 조작만 하는 클래스 라이브러리에서는 매우 자주 사용되지만 GUI에서 이용하는 것은 상당히 어렵다(NUnit 자세한 내용은 Test Driven Development Using NUnit in C#를 참조). GUI의 aspx 페이지의 테스트용 프레임워크를 구현하는 NUnitAsp라는 특별 옵션에서 Hext Corm을 제공하는 Hest Cormnit Spnit Spnit Sp의 사용 도구로, NUI의 Sp라는 열린 Tool을 참조). GUI의 Spen text Sp의 사용 툴에서 사용하는 Tool을 구현하는 오픈 Tool이것에 의해 NUnit 테스트내에서, QueryString, Session, ViewState, PostBack, Web.config등을 고려하면서, 유저와 완전히 같은 방법으로 페이지를 로드할 수 있다.게다가 프로그램적으로 이벤트를 트리거해, 그 결과의 속성을 조사할 수 있다.이것은 완전히 새로운 개념의 테스트 기법이다. NUnit Asp의 웹사이트에는 범용적인 튜토리얼이 준비되어 있으므로 여기에서는 처음부터 설명하는 것이 아니라 간단한 샘플을 소개한 후에 NUnit Asp를 이용해서 보다 고도의 문제를 해결하는 방법에 대해서 알아보도록 하겠다.코드 샘플은 상기 링크에서 다운로드 가능하다.간단한 예로부터는, 우선 NUnit Asp를 사용한 「Hello, World!」적인 테스트를 실행해 보자.올바른 TDD에서는, 먼저 테스트를 기술하고, 그 테스트에 합격하는 코드를 쓰는 것이 기본이지만, 여기에서는 NUnitAsp 의 사용법을 알기 쉽게 설명하기 위해서, 먼저 어플리케이션 부분을 기술하기로 한다.우선, 다음의 2개의 프로젝트를 사용한 새로운 솔루션을 작성한다.웹Main--ASP.NET 웹 애플리케이션 프로젝트
UitGui--GUI용의 단체 테스트와 통합 테스트를 포함한 콘솔 애플리케이션 이 Web 프로젝트에서는, Basic.aspx 라고 하는 이름의 WebForm을 작성한다.이 폼에는 텍스트 박스, 버튼, 라벨이 각각 1개씩 포함되어 있다.사용자가 버튼을 클릭하면 텍스트 상자의 값이 라벨에 표시된다.이 페이지는 코드 샘플의 SimpleBasic.aspx에 포함되어 있다.관련하는 메소드는 다음의 하나뿐이다.private void Button 1 _ Click ( object sender , System . EventArgs e )
{
this . Label 1 . Text = this . TextBox 1 . Text ;
}여기서 프로젝트를 실행하고, 페이지가 제대로 동작하는지 확인해 보자.이 페이지를 Visual Studio에 로딩할 수 없는 경우에는 아마도 NUnit Asp 내에서도 실행할 수 없다.이 간단한 예에서는 텍스트 상자, 버튼, 라벨이 올바르게 연동되어 있는지 확인한다.Uit Gui 프로젝트에서는 nunit.framework.dll(버전 2.2)와 NUnit Asp.dll(버전 1.5.1) 양쪽에 대한 참조를 추가한다.이러한 DLL은 코드 샘플에 포함되어 있는 것 외에 각각의 Web 사이트로부터도 다운로드할 수 있다.여기에 TestBasic.cs 라는 새로운 클래스를 추가한다.이 클래스를 NUnit Asp로 실행하는데 필요한 절차는 다음과 같다. NUnit DLL 및 System DLL 내의 이름 공간에 대한 클래스 참조를 작성한다.
using System ;
using System . Web ;
using NUnit . Framework ;
using NUnit . Extensions . Asp ;
using NUnit . Extensions . Asp . AspTester ;
클래스 선언 행에 [Test Fixture] 속성을 추가하여 이 클래스에 테스트가 포함되어 있음을 NUnit Asp에 지시한다.게다가 이 클래스를 WebForm Test Case 클래스로부터 파생시키고, Web 페이지의 로드처가 되는 Browser 속성과 테스트 조건을 조사하기 위한 아사션을 계승한다.
[ TestFixture ] public class TestBasic : WebFormTestCase
컨스트럭터를 public 으로 하고, NUnit Asp 등의 외부 프로그램이 이 클래스를 인스턴스화하여 테스트를 호출할 수 있도록 한다.
public Test Basic() { } 이번에는 실제로 테스트를 기술해 보자.일단 테스트 코드를 봐라자세한 내용은 나중에 설명한다. [Test] public void Select Dropdown()
{
string strURL = TestConstants . AppPath + ′ Simple / Basic . aspx ′ ;
Browser . GetPage ( strURL ) ;

// declare the controls :
ButtonTester Button 1 = new ButtonTester ( ′ Button 1 ′ , CurrentWebForm ) ;
LabelTester Label 1 = new LabelTester ( ′ Label 1 ′ , CurrentWebForm ) ;
TextBoxTester TextBox 1 = new TextBoxTester ( ′ TextBox 1 ′ , CurrentWebForm ) ;

// run through actions :
string strValue = ′ Hello ′ ;
TextBox 1 . Text = strValue ;
Button 1 . Click ( ) ;

// check values :
WebAssertion . AssertEquals ( strValue , Label 1 . Text ) ;

} //end of method 이 테스트 코드는 NUnit의 표준 메서드 선언으로부터 시작되었다.이 메소드는 [Test] 속성과 void의 반환값을 필요로 하며 파라미터는 받지 않는다.다음으로, 로드하는 페이지의 URL을 생성하고, 그것을 Browser 객체의 GetPage() 메서드에 건네주고 있다.http://local host/my projects/ 등의 도메인명을 하드코딩하지 않고 정수급으로 추상화했다는 점에 주목하기 바란다.Browser.GetPage() 메서드에 페이지를 넘겨준 후에는 표준 서버 컨트롤에 대응하는 Asp Tester 객체를 작성한다.Asp Tester Contracter에는 Asp ID와 컨테이너 컨트롤(Current Web Form, 사용자 컨트롤 오브젝트 등)을 전달해야 한다.중요한 것은 Asp Tester 객체를 작성한 뒤 부분이다.이러한 Asp Tester 객체를 통해 실제 사용자와 동일한 방법으로 페이지 내 컨트롤들의 대부분의 속성에 프로그램적으로 접근할 수 있게 되기 때문이다.이 페이지의 실행 플로우는 단순하며 텍스트 상자의 값을 설정하고 버튼을 클릭하기만 하면 된다.마지막으로 페이지의 최종적인 상태를 테스트할 필요가 있다.즉, 라벨에 텍스트 박스의 값이 할당되어 있는지를 확인하는 것이다.NUnit Asp 의 Web Assertion 클래스에는 페이지가 예상대로 되어있는지 여부를 확인하기 위한 표준 메서드가 준비되어 있다.이 샘플에서는 라벨이 지정된 값과 동일한지 여부를 확인하고 싶기 때문에 Assert Equals 메서드를 사용한다.그럼 NUnit 콘솔을 열고 ′Uit Gui.dll′을 로드하고 테스트를 실행해 보자.시험 옆에 녹색 동그라미가 표시될 것이다.시험에 합격했다는 뜻이다.이것으로 첫 번째 테스트는 완료되었다. NUnit Asp를 사용하면 간단하지만 NUnit Asp를 사용하지 않으면 더욱 번거로웠을 것이다.′Hello, World!′ 같은 샘플도 나쁘지 않지만, 실제로 해결해야 하는 문제들은 훨씬 더 복잡하다.이후에서는, NUnit Asp 를 사용해 이러한 문제에 임하기 위해 5 개의 테크닉을 소개한다.공통 기능을 기저 클래스로 추상화하다
래퍼 페이지를 사용하다
각각의 테스트를 확실하게 베이스라인으로 리셋하다
단순한 통합 테스트와 기능 테스트 생성하기
테스트를 Visual Studio 디버거 내에서 실행하는 공통기능을 기저 클래스로 추상화 하는 Browser.Get Page()를 호출한 후에는 웹 어플리케이션이 다른 페이지(페이지 로드가 실패했을 경우의 글로벌 에러 페이지 등)로 리다이렉트하지 않았는지 여부를 체크해야 한다.이 체크는 다음 코드로 실행할 수 있다.WebAssertion.Assert Equals(Browser. Current Url. To String(), str URL); 그러나 이것은 어떤 테스트라도 필요한 처리이므로 공통 기저 페이지 객체로 추상화 해 두는 것이 편리하다.공용 클래스 테스트베이스 : WebFormTestCase
{
공개 테스트 기준()
{
} //사기 끝

publicvoidCheckPage(strExpectedUrl 문자열)
{
웹 주장.Assert Equals(′예상된 페이지가 실제 페이지와 일치하지 않습니다. ′ +
′Expected=px + strExpectedUrl + ′.′ 실제=실제 +
브라우저.현재Url.ToString() + ′,′,
브라우저.현재Url.ToString(),strExpectedUrl);
} //방법 종료
} //end of classこの基底ページがwebformtestcaseを継承していることに注目してほしい。ここでcheckpage()メソッドを作成しておくと、このメソッドをすべてのテストから使用できるようになる。この基底クラスを実装しnunitaspが直接アクセスできるのはwebformだけである。ユーザーコントロールや、session値などの項目を含んでいるhttpcontextに直接アクセスすることはできない。しかし、これらの要素をヘルパーのwebformでラnunitaspから間接的に参照することが可能である。例えば、ドロップダウンリストとラベル(いずれもwebコントロール)を含んだucdropdown.ascxというユーザーコントロールをテストしたい場合だ。このユーザ
publicvoid SetValues( 문자열 [] astValues)
public 문자열 GetSelectedValue() 테스트ucdropdown.aspxというwebformを作成してテスト対象のユーザーコントロールを配置し、このユーザーコントロールのプロパティにアクセスするためのコントロールをいくつか追加する。つまり、ユーザーコントロucdropdown.aspx webformを作成するわけだ。ボタンがクリックされると、テキストボックスの値がユーザーコントロールのsubjectプロパティに割り当てられる。ラベルには、subjectプロパティの値が表示される。nunitaspではページ上のwebコントロールを簡単に操作できるので、これらのwebコントロールを使ってユーザーコントロールを間接的に操作できる。次の図は、サンプルのwebformを実行した様子である。これはテストUG
사용...
네임스페이스 WebMain
{
public class TestUCDropDown : 시스템.웹 UI 페이지
{
...
}
공용 문자열 제목
{
{반환해 주세요.Lbl Subject.텍스트;}
{이것}을(를) 설정합니다.Lbl Subject.텍스트 = 값;}
}
}
#endifこのテクニックを使用すると、ユーザーコントロールをテストするだけでなく、httpcontextユーティリティクラスの処理と、httpcontextオブジェクトそのものの操作も行うことができる。例えば、クエリ文字nunitaspを使って単体テストをビルドすればよい。サンプルコードのwrapperフォルダにはいくつかの例があるので参考にしてもらいたい。それぞれのテストを確実にベースラインにリセットするテストの基本原則は、すべiisをリセットするというものがある(これにより、アプリケーション全体の状態がリセットされる)。このコマンドは、system.진단.processクラスを使って次のようにプログラム的に呼び出すことができる。public void iisreset() {
strFile = ′IISRESET′ 문자열;
ProcessStartInfo psi = 새 ProcessStartInfo();
psi.창 스타일 = 프로세스창 스타일.숨김;
psi.파일 이름 = strFile;
프로세스 p = 시스템.진단.과정시작(psi);
p.출구 대기();
}キャッシュ値とsession値をリセットする他に、現在のスレッドのcultureとuicultureもリセットしなければならないことがある。グローバライゼーションのために、現在のスレッドには、日付と通貨の書式を決定するcultureと、使用するリソースファイルを決定するuicultureという値がある。グローバルアプリケーションをテストする場合には、各テストの後に現在のスレッドを次のように設定して、これらの値を確実にリセットするべきである。public void resetculture() {
시스템.스레딩.스레드.현재스레드.CurrentCurrentCulture
새로운 시스템.세계화.CultureInfo(′en-US′);
시스템.스레딩.스레드.현재스레드.현재UICulture =
새로운 시스템.세계화.CultureInfo(′en-US′);
}どのテストをリセットするかに応じて、これらのメソッドをテストから個別に呼び出すことも、クラスまたは基底クラスのteardown()メソッド内から呼び出すこともできる(グローバルスコープの場合)。単純な統合nunitaspでは、プレゼンテーション層を制御することにより、単純な機能テストや統合テストを暗黙的に記述することもできる。機能テストの例としては、ビジネスプロセスのフロー全体にわたってユーザーのアクションa)では、ドロップダウンから動物を選択するよう要求される。実際に選択すると、確認用のページ(pageb)に進み、選択した動物の名前が表示される。このユーザーが行う1つ1つの手順を真似たテストを作成するnetデバッガの長所は、デバッガ内でコードのステップ実行やテストができることである。しかしnunitaspでは、webアプリケーションへのアクセス方法の都合により、デバッガでステップ実行をするとasptesterオブジェクトがnullになってしまう。1つの解決方法は、フリーのtestdriven.netアドインをダウンロードすることだ。이 애드인을 사용하면, 메소드내에 커서를 두고 오른쪽 클릭하는 것만으로, 그 메소드의 디버깅 모드로 들어갈 수 있다.요약본고에서는 NUnit Asp를 사용하여 GUI 컴포넌트의 단체 테스트를 실현하는 방법과 간단한 것이면 기능 테스트 및 통합 테스트도 실현할 수 있다는 점을 소개했다. NUnit Asp에는 그 밖에도 다음과 같은 장점이 있다.무료 도구이다.
이미 개발자들이 친숙한 NUnit에 직접 통합되어 있는
사용법을 알기 쉽다.WebForm 제어를 위한 클래스 라이브러리를 제공하는 것뿐이므로 그 라이브러리를 개발자가 좋아하는 .NET 언어로 프로그래밍할 수 있어 새로운 테스트 어플리케이션 사용법을 배울 필요가 없음
몇 줄의 코드를 쓰는 것만으로 손쉽게 테스트를 만들 수 있다
오픈 소스 툴이므로, 서드 파티제의 라이센스 제품보다 빠른 페이스로 기능 향상이나 기능 확장을 기대할 수 있는 NUnitAsp의 최대의 단점은, Web 애플리케이션내의 분리 코드 클래스 밖에 테스트 할 수 없는 것일 것이다.즉, JavaScript 등의 클라이언트 사이드 코드를 테스트할 수 없다.또 NUnit Asp 에서는 단순히 Netscape 나 IE 로 표시할 수 있는 HTML 페이지가 아닌 적절한 형식의 HTML 페이지가 요구된다.HTML 페이지의 유효성은 http://validator.w3.org/의 온라인 검증 프로그램에서 볼 수 있다.NUnit Asp는 편리한 툴이며 특히 GUI의 단체 테스트에는 위력을 발휘한다.그러나 이것을 사용했다고 해서 기타 부분의 테스트 프로세스가 불필요하게 되는 것은 아니며, GUI에서만 테스트할 수 있는 코드를 써도 무방하게 된다.백엔드의 비즈니스층 및 데이터베이스층을 테스트하기 위해서는 NUnit과 같은 별도의 테스트 프레임워크를 사용해야 한다(NUnit 자세한 내용은 ′Test Driven Development Using NUnit in C#′ 참조). NUnit Asp는 무료로 사용법도 간단하므로 .NET 툴킷에 추가하여 두는 방법과 함께 사용한다.参考資料nunitaspのwebサイト(バージョン1.5.1)
NUnithttp://www.nunit.org/은 웹 사이트 http://http2입니다.2)
테스트 주행.NET → 웹 →
オンラインhtml検証ツール
Microsoft의 테스트 기반 개발.넷, 제임스 W 뉴커크와 알렉세이 A. 보론초프
NUnit, Andrew Hunt 및 David Thomas와 함께 C#에서 실습 장치 테스트
반응형