2012-06-26 29 views
23

Tôi đang học xUnit và cho đến nay, đã tìm thấy nó là một công cụ hữu ích nhất. Nó làm cho tôi suy nghĩ lại một số chiến thuật mã hóa của tôi để TDD thay thế.cách gỡ lỗi bằng xUnit?

Tuy nhiên, tôi đã gặp một vấn đề thú vị. Trường hợp thử nghiệm của tôi không thành công. Không có mối quan tâm thực sự ở đó, nhưng làm thế nào để gỡ lỗi nó?

Cụ thể là trường hợp thử nghiệm của tôi không thành công do lỗi "hết chỉ mục" hoặc tương tự. Nó KHÔNG thất bại trong câu khẳng định. Những gì tôi cần bây giờ, là một số cách để chạy các trường hợp thử nghiệm với Visual Studio debugger hoạt động để tôi có thể nhìn thấy tình trạng của các biến khác nhau.

Tôi sẽ không đăng mã, vì tình huống này chắc chắn sẽ xuất hiện trở lại. Có ai có bất kỳ ý tưởng CÁCH để gỡ lỗi các trường hợp thử nghiệm chính nó?

Hầu như đã quên! Tôi đang sử dụng,

  • Visual Studio 2010 Ultimate (DreamSpark giấy phép)
  • xUnit 1,9

công việc của tôi liên quan bằng cách sử dụng Á hậu xUnit GUI để chạy thử nghiệm.

Nếu những gì tôi đang hỏi là không thể, ai đó có thể đề xuất một bộ kiểm tra thay thế tôi có thể sử dụng mà có những gì tôi muốn?

+1

Trên thực tế, nếu bạn đang gỡ lỗi kiểm tra đơn vị, đó là một thử nghiệm đơn vị xấu. Các xét nghiệm nên được thiết kế đơn giản và dễ hiểu nhất có thể, vì vậy bạn có thể xác minh tính chính xác của nó bằng cách chỉ nhìn vào chúng. Xem xét việc viết lại bài kiểm tra này. – J0HN

+3

@ J0HN, lỗi trong câu hỏi đến từ mã tôi đã thử nghiệm, KHÔNG phải là bài kiểm tra đơn vị. Vấn đề của tôi là tìm ra tại sao nó xảy ra. xUnit helpfully cho tôi biết rằng dòng XX sản xuất ngoại lệ YYY, nhưng nó không cho tôi biết bất cứ điều gì khác. Giống như trạng thái của các biến khi ngoại lệ xảy ra (hoặc tương tự) là gì? – chronodekar

+0

@ J0HN có trường hợp khi kiểm tra đơn vị không phải là xấu cho mỗi lần; Tôi vừa có một ví dụ rất khó phát hiện vì * dissonance nhận thức * ~~ caveat, điều này xảy ra rất sớm trong sự phát triển của một dự án và liên quan đến một chữ số trong [SUT] (http: // stackoverflow. com/questions/7321407/what-is-sut-và-where-did-it-come-from) có chữ số được chuyển đổi ở đâu; trong trường hợp này, thử nghiệm đơn vị + gỡ lỗi được cộng tác để giúp tôi làm cho SUT mạnh mẽ hơn. – gerryLowry

Trả lời

8

tôi đã không kiểm tra này, nhưng bạn sẽ có thể đính kèm hình ảnh studio để GUI xUnit và gỡ lỗi từ đó.

Từ Debug Menu chọn 'đính kèm để xử lý', hãy xác định tên của file thực thi trong danh sách và bấm đính kèm. Đặt các điểm ngắt trong thử nghiệm đơn vị theo yêu cầu và chạy thử nghiệm từ GUI. Breakpoint nên được nhấn như mong đợi.

+1

Với NUnit, bạn có thể đặt GUI làm chương trình để bắt đầu khi gỡ lỗi và chuyển tên assembly thành một đối số. Nhấn F5 sau đó sẽ khởi chạy giao diện NUnit bên dưới trình gỡ lỗi với cụm chính xác. Tôi đang _assuming_ rằng bạn có thể làm điều gì đó tương tự với xUnit. – adrianbanks

+0

@adrianbanks Cảm ơn bạn rất nhiều vì ý tưởng đó! Không bao giờ thực sự xảy ra với tôi. Một số twiddling xung quanh với các "gỡ lỗi" tài sản và tôi đã nhận xUnit GUI Á hậu để bắt đầu lên khi tôi chạy debug AND với thông tin biến quá !! :) – chronodekar

6

Sau đây sẽ hoạt động trong VS.NET và trong SharpDevelop.

mở thuộc tính của dự án thử nghiệm và đi vào Debug tab:

  • Dưới "Bắt đầu hành động" thiết lập "Start chương trình bên ngoài" vào xUnit Á hậu thực thi của sự lựa chọn.

  • Trong "Tùy chọn bắt đầu" đặt "Đối số dòng lệnh" thành tên của DLL gỡ lỗi của dự án của bạn.

  • Ngoài ra thiết lập "thư mục làm việc" thành "bin \ Debug \" của dự án thư mục.

Sau đó chọn Gỡ lỗi> Chạy hoặc nhấn F5 để chạy thử nghiệm trong chế độ gỡ lỗi. Điểm ngắt sẽ bị trúng.

Ưu điểm của việc làm gỡ lỗi bạn theo cách này là bạn không cần phải gắn vào GUI xUnit mỗi thời gian, bạn chỉ cần để chạy dự án thử nghiệm của bạn.

2

Nếu bạn có resharper, với phần mở rộng X-đơn vị contrib cài đặt (đề nghị nghiêm túc!), Kích chuột phải vào lớp học trong visual studio và bấm vào nút "kiểm tra đơn vị debug".

Đơn giản!

+0

Miễn là bạn không sử dụng phần mở rộng cho ReSharper có hỗ trợ xUnit2, thì gỡ lỗi là một nỗi đau trong .... https://github.com/xunit/resharper-xunit/issues/9 – Daniel

+0

+ 1 @Adam Diment ... cảm ơn bạn ... Tôi đang sử dụng vs2015 Enterprise với JetBrains ReSharper Ultimate vì vậy tôi không chắc liệu tính năng này là từ ReSharper hoặc bây giờ có nguồn gốc từ vs2015; bất kể, nhấp chuột phải vào tên lớp của lớp kiểm tra xUnit.net của tôi, vì hướng dẫn của bạn, tôi đã tìm thấy "Kiểm tra gỡ lỗi" (ctrl + r, ctrl + t) ... đề xuất của bạn đã giúp tôi khám phá lý do thử nghiệm của tôi là thất bại (đặc biệt là một lỗi đánh máy về một chữ mà tôi đã bị mù). ** B -) ** – gerryLowry

8

Tôi đã thất bại trong việc thực hiện tất cả những điều trên, nhưng sau đây làm việc cho tôi: Trước khi dòng mà bạn muốn gỡ lỗi thêm dòng sau (sau đó chạy thử nghiệm):

 System.Diagnostics.Debugger.Launch(); 

Hạn chế là nó sẽ khởi động một thể hiện khác của VS :).

Chúc mừng!

+0

Rất tiếc, đây là cách duy nhất để gỡ lỗi thử nghiệm dnx trong bản phát hành VS 2015 – STO

25

Trong VS2015 trở lên, hãy cài đặt gói xunit.runner.visualstudio NuGet. Sau đó, việc gỡ lỗi cũng dễ dàng như việc nhấp chuột phải vào thử nghiệm trong cửa sổ trình khám phá thử nghiệm. (Kiểm tra -> Windows -> TestExplorer nếu bạn không thể nhìn thấy nó).

enter image description here

+0

+1 @ user1585345 cảm ơn ... tôi đã quên "khi nghi ngờ, nhấp chuột phải" câu thần chú; đề xuất của bạn là một cách tuyệt vời để nhanh chóng gỡ lỗi một thử nghiệm không thành công nếu cần thiết. – gerryLowry

+1

Tôi đã thử điều này, nhưng tôi tiếp tục nhận được TestClass.cs không tìm thấy. –

1

Trong visual studio 2017, đảm bảo rằng cấu hình giải pháp là dưới chế độ 'Debug'. Trong chế độ 'Phát hành', nó không phải là gỡ lỗi.