2015-01-18 7 views
0

안녕하세요, 저는 다른 사람들이 전에 물었던 것을 알고 있지만 온라인에 게시 된 사람들에 대해서는 여전히 불분명합니다. 따라서이 질문을 게시하여 의심을 분명히하고 있습니다. 너희들이 나를 도와 줄 수 있었으면 좋겠다.코드화 된 UI 실패 계속 계속 어설 션

현재 Microsoft Visual Studio 2013 Premium을 사용하고 있습니다. 레코드 및 재생 기능을 사용하고 있습니다. 몇 가지 작업과 몇 가지 확인 포인트를 기록합니다. 이제 검증 포인트가 실패하면 스크립트가 즉시 중지됩니다. 그러나 어떤 점이 실패하더라도 스크립트를 계속 실행하고 싶습니다. 그리고 나는 온라인에서 몇 가지 옵션을 읽었지 만, 나는 그 스크립트를 어디에 두어야하는지 잘 모른다. 이 게시물을 보았습니다 Coded UI - "Continue on failure" for Assertions 그러나 SpecFlow를 사용하지 않고 여전히 해당 사항이 있습니까? 또한이 코드를 어느 부분에 배치해야합니까? 내 방법 안에? 새로운 방법을 만드시겠습니까? 또는?

bool thisTestFailed = false; 
if (... the first assertion ...) { thisTestFailed = true; } 
if (... another assertion ...) { thisTestFailed = true; } 
if (... and another assertion ...) { thisTestFailed = true; } 
if (thisTestFailed) { 
Assert.Fail("A suitable test failed message"); 
}" 
+0

어설 션은 Assert.SomeCondition() 사용을 의미하지 않습니다. 그냥 간단한 조건문을 사용하여 thisTestFailed를 설정하면됩니다. – Darek

답변

0

어설 션은 Assert.SomeCondition()을 암시하지 않습니다. 간단한 조건문을 사용하여 thisTestFailed을 설정하면됩니다. Assert 클래스는 AssertFailedException을 throw하여 실패를 알립니다. 이 예외는 캡처해서는 안됩니다. 이 예외는 단위 테스트 엔진이 처리하여 어설 션 오류를 나타냅니다.

bool thisTestFailed = false; 
if ({someCondition}) { thisTestFailed = true; } 
if (!{someOtherConditionWhichShouldBeFalse}) { thisTestFailed = true; } 
if ({yetAnotherCondition}) { thisTestFailed = true; } 
if (thisTestFailed) { 
    Assert.Fail("A suitable test failed message"); 
}" 

또는 더 쉽게

:

bool thisTestFailed = {someCondition} || 
!{someOtherConditionWhichShouldBeFalse} || 
{yetAnotherCondition} 
Assert.IsFalse(thisTestFailed, "A suitable test failed message"); 

당신이 당신의 "테스트"를 얻을이 방법하지만, 단 하나의 Assert.Fail.

+0

흠 .. 그렇다면 어설 션이 실패 할 때 스크립트가 멈추는 것을 어떻게 막을 수 있습니까? – Lee

+0

그래서 위에있는 방법 대신 이걸 사용해야합니까? 'if (thisTestFailed) { 어설트실패 ("적절한 테스트 실패 메시지"); }' – Lee

+0

필요하면 아니요. 처음에 모든 테스트가 "작동"하면 testFailed의 값은 false로 유지됩니다. 따라서 Assert가 false가 될 것으로 예상하고, 그렇지 않으면 Assert.IsFalse()에 두 번째 매개 변수로 주어진 메시지를 표시합니다. – Darek

0

링크 된 질문에는 Specflow가 언급되어 있지만 질문의 세부 내용과 허용 된 답변은 Specflow에 의존하지 않습니다.

void AssertionMethod1() 
{ 
    ... get the values of fieldOne, fieldTwo, etc 
    Assert.Equals(fieldOne, fieldOneExpectedValue); 
    Assert.Equals(fieldTwo, fieldTwoExpectedValue); 
    Assert.Equals(fieldThree, fieldThreeExpectedValue); 
    ... more calls of assert methods. 
} 

단언 사용 방법 및 아마도 더 복잡 할 것이다 필드 값 액세스 메커니즘 : 생성 부호화 UI 레코드에 의해 생성

일반적 어설 방법은 비트 같다.

링크 된 질문은 따라서로 기록 된 주장 메서드 호출 ( CodedUItestMethod1에서 AssertionMethod1의 즉, 전화를) 변경 제안한다
void Assert.Equals(string actual, string expected) 
{ 
    if (actual == expected) 
    { 
     // Pass. Nothing more to do. 
    } 
    else 
    { 
     // Fail the test now. 
     throw AnAssertionFailureException(...); 
    } 
} 

뭔가 :

Assert.Equals(...)의 각을

은을 목적으로 유사한 코드로 구현된다 같은 : 더 쉬운 방법이 다른 파일에 AssertionMethod1을 복사 한 다음 위처럼되고 수정 될 수있다

... get the values of fieldOne, fieldTwo, etc 
if(fieldOne != fieldOneExpectedValue) { thisTestFailed = true; } 
if(fieldTwo != fieldTwoExpectedValue) { thisTestFailed = true; } 
if(fieldThree != fieldThreeExpectedValue) { thisTestFailed = true; } 
... etc. 

있지만. 코딩 된 UI의 UIMap 편집기에는 메서드를 uimap.cs 파일로 이동하는 "UIMap.cs로 코드 이동"명령 (상황에 맞는 메뉴 또는 명령 아이콘으로 액세스)이 있으므로 필요에 따라 편집 할 수 있습니다. 자동 생성 된 코드는 uimap.designer.cs 파일에 저장되며이 파일을 편집하면 안됩니다. 이 파일과 uimap.cs 파일은 모두 partial class UIMap의 윗부분에 있습니다. 따라서 결합 된 내용으로 클래스가 만들어집니다. uimap.cs 파일은 UI 맵에 추가 한 파일입니다.