2008-10-22 12 views
9

Tôi đang sử dụng Microsoft WebTest và muốn có thể làm điều gì đó tương tự như số Assert.Fail() của NUnit. Điều tốt nhất tôi đã đưa ra là throw new webTestException() nhưng điều này hiển thị trong kết quả kiểm tra dưới dạng Error thay vì Failure.Làm cách nào để tôi có thể thất bại trong WebTest?

Ngoài phản ánh trên WebTest để đặt biến thành viên riêng tư cho biết lỗi, có điều gì tôi đã bỏ lỡ không?

EDIT: Tôi cũng đã sử dụng phương pháp Assert.Fail(), nhưng điều này vẫn hiển thị dưới dạng lỗi thay vì lỗi khi được sử dụng từ bên trong WebTest và thuộc tính Outcome là chỉ đọc (không có công khai).

EDIT: bây giờ tôi thực sự bối rối. Tôi đã sử dụng phản chiếu để đặt thuộc tính Outcome thành Không thành công nhưng thử nghiệm vẫn còn vượt qua!

Dưới đây là đoạn code mà đặt Oucome đến thất bại:

public static class WebTestExtensions 
{ 
    public static void Fail(this WebTest test) 
    { 
     var method = test.GetType().GetMethod("set_Outcome", BindingFlags.NonPublic | BindingFlags.Instance); 
     method.Invoke(test, new object[] {Outcome.Fail}); 
    } 
} 

và đây là đoạn code mà tôi đang cố gắng để thất bại:

public override IEnumerator<WebTestRequest> GetRequestEnumerator() 
    { 
     this.Fail(); 
     yield return new WebTestRequest("http://google.com"); 
    } 

Outcome là nhận được thiết lập để Oucome.Fail nhưng dường như các WebTest framework không thực sự sử dụng điều này để xác định kết quả kiểm tra/lỗi.

Trả lời

2

Đặt Outcome property-Fail:

Outcome = Outcome.Fail; 

Ngoài ra còn có một Assert.Fail() trong Microsoft.VisualStudio.QualityTools.UnitTestFramework lắp ráp.

+0

nên đã rõ ràng hơn ... Tôi đã có đã thử cả hai. (câu hỏi đã chỉnh sửa để phản ánh điều này) – craigb

+0

[Microsoft.VisualStudio.QualityTools.WebTestFramework, Version = 9.0.0.0] Microsoft.VisualStudio.TestTools.WebTesting.WebTest.set_Outcome (Microsoft.VisualStudio.TestTools.WebTesting.Outcome value) là public –

+0

Not theo dll tôi đang sử dụng. Oucome là một người bắt đầu công khai, nhưng không có công khai nào. Tôi đã sử dụng sự phản chiếu để cal set_Outcome (đó là riêng tư) nhưng nó vẫn không có hiệu lực trên kết quả kiểm tra (tức là nó cho đến khi không thất bại) – craigb

1

Thuộc tính Kết quả sẽ thiết lập cộng đồng tại VSTS 2010 :-)

1

Làm thế nào về:

Assert.IsTrue(false); 

tôi đã không xác nhận nó, vì vậy nó có thể nó sẽ được báo cáo là một lỗi chỉ như Assert.Fail(), và tôi đồng ý đó là một hack. Nhưng vì Assert.Fail() dường như không hoạt động theo cách bạn mong đợi, và cũng không thiết lập Kết quả, tôi không thấy một lựa chọn nào khác.

1

Bạn thực hiện kiểm tra luôn không thành công bằng cách thêm quy tắc xác thực luôn thất bại. Ví dụ, bạn có thể viết một quy tắc xác nhận thất bại như thế này:

public class FailValidationRule : ValidationRule 
{ 
    public override void Validate(object sender, ValidationEventArgs e) 
    { 
     e.IsValid = false; 
    } 
} 

Sau đó đính kèm các quy tắc xác nhận mới, bạn ValidateResponse sự kiện của webtest của bạn, như vậy:

public class CodedWebTest : WebTest 
{ 
    public override IEnumerator<WebTestRequest> GetRequestEnumerator() 
    { 
     WebTestRequest request1 = new WebTestRequest("http://www.google.com"); 
     FailValidationRule failValidation = new FailValidationRule(); 
     request1.ValidateResponse += new EventHandler<ValidationEventArgs>(failValidation.Validate); 
     yield return request1; 
    } 
} 
0

Thiết lập giá trị của quả trong PostWebTest xử lý sự kiện.

1

Một giải pháp mà sẽ làm việc trong các thử nghiệm khai báo (cũng như mã hóa) là:

  • viết một Rule Validation thất bại khi một bối cảnh nhất định Parameter (ví dụ'FAIL') xuất hiện trong bối cảnh
  • khi bạn muốn kích hoạt lỗi, đặt Tham số ngữ cảnh và gọi cho WebTest.Stop()
  • thêm Quy tắc xác thực làm quy tắc cấp WebTest (không yêu cầu cấp) để nó chạy trên tất cả các yêu cầu

Tôi nghĩ điều đó thật ngắn gọn có thể thực hiện được.

1

Trước tiên, tôi đang làm việc với VB.net, nhưng tôi cũng đã cố gắng đặt kết quả thành thất bại trước khi tìm ra kết quả không hoạt động (đã đưa tôi đến đây).

Cuối cùng tôi cố gắng làm điều đó bằng cách chỉ ném một ngoại lệ:

Public Overrides Sub PostRequest(ByVal sender As Object, ByVal e As PostRequestEventArgs) 

    If YourTest = True Then 

     Throw New WebTestException("My test Failed") 

    End If 

    MyBase.PostRequest(sender, e) 

    End Sub 

Tôi biết chủ đề này là cũ nhưng tôi hy vọng nó sẽ giúp người anyway :)

Các vấn đề liên quan