119

Tôi đang sử dụng Visual Studio 2010 Beta 2. Tôi có một đơn [TestClass], trong đó có [TestInitialize], [TestCleanup] và một số [TestMethods].Tại sao TestInitialize bị sa thải đối với mọi thử nghiệm trong các thử nghiệm đơn vị Visual Studio của tôi?

Mỗi khi phương pháp thử được chạy, phương pháp khởi tạo và dọn dẹp cũng C runNG chạy!

Tôi đã có ấn tượng rằng [TestInitialize] & [TestCleanup] chỉ nên chạy một lần, cho mỗi lần chạy thử nghiệm cục bộ.

Điều đó có đúng không? Nếu không, cách thích hợp để làm điều này là gì?

Trả lời

241

TestInitializeTestCleanup được chạy trước và sau mỗi lần kiểm tra, điều này đảm bảo rằng không có thử nghiệm nào được kết hợp.

Nếu bạn muốn chạy các phương pháp trước và sau TẤT CẢ các thử nghiệm, hãy trang trí các phương pháp có liên quan với các thuộc tính ClassInitializeClassCleanup.

thông tin có liên quan từ tự động tạo kiểm tra file trong Visual Studio:

Bạn có thể sử dụng các thuộc tính bổ sung sau khi bạn viết bài kiểm tra của bạn:

// Use ClassInitialize to run code before running the first test in the class 
[ClassInitialize()] 
public static void MyClassInitialize(TestContext testContext) { } 

// Use ClassCleanup to run code after all tests in a class have run 
[ClassCleanup()] 
public static void MyClassCleanup() { } 

// Use TestInitialize to run code before running each test 
[TestInitialize()] 
public void MyTestInitialize() { } 

// Use TestCleanup to run code after each test has run 
[TestCleanup()] 
public void MyTestCleanup() { } 
+4

và bạn có thêm hai AssemblyInitialize và AssemblyCleanup như đề cập ở đây http://stackoverflow.com/a/21304674/864201 –

+2

Will TestInitialize chạy cho các thử nghiệm được đánh dấu [Bỏ qua]? –

10

đây là hành vi khá chuẩn đối với các bộ thử nghiệm: thiết lập và rách trước và sau mỗi lần kiểm tra. Triết lý là các xét nghiệm không nên phụ thuộc vào nhau. Nếu bạn muốn một hành vi khác, bạn có lẽ nên sử dụng các đối tượng tĩnh tồn tại giữa mỗi thử nghiệm.

-1

Phương pháp được đánh dấu với [TestInitialize() ] thuộc tính được sử dụng để chuẩn bị các khía cạnh của môi trường mà thử nghiệm đơn vị của bạn sẽ chạy. Mục đích của việc này là thiết lập một trạng thái đã biết để chạy thử nghiệm đơn vị của bạn. Bạn có thể sử dụng phương pháp [TestInitialize()] để sao chép, sửa đổi hoặc tạo một số tệp dữ liệu nhất định mà thử nghiệm của bạn sẽ sử dụng.

Tạo các phương pháp được đánh dấu bằng thuộc tính [TestCleanUp {}] để trả về môi trường cho trạng thái đã biết sau khi thử nghiệm đã chạy. Điều này có nghĩa là việc xóa các tệp trong các thư mục hoặc trả về cơ sở dữ liệu cho một trạng thái đã biết. Ví dụ về việc này là đặt lại cơ sở dữ liệu khoảng không quảng cáo thành trạng thái ban đầu sau khi thử nghiệm một phương thức được sử dụng trong một ứng dụng mục nhập đơn đặt hàng.

Để biết thêm thông tin vui lòng tham khảo: http://msdn.microsoft.com/en-us/library/ms182517%28v=vs.100%29.aspx

5

Full dụ

using Microsoft.VisualStudio.TestTools.UnitTesting; 
using SampleClassLib; 
using System; 
using System.Windows.Forms; 

namespace TestNamespace 
{ 
    [TestClass()] 
    public sealed class DivideClassTest 
    { 
     [AssemblyInitialize()] 
     public static void AssemblyInit(TestContext context) 
     { 
      MessageBox.Show("AssemblyInit " + context.TestName); 
     } 

     [ClassInitialize()] 
     public static void ClassInit(TestContext context) 
     { 
      MessageBox.Show("ClassInit " + context.TestName); 
     } 

     [TestInitialize()] 
     public void Initialize() 
     { 
      MessageBox.Show("TestMethodInit"); 
     } 

     [TestCleanup()] 
     public void Cleanup() 
     { 
      MessageBox.Show("TestMethodCleanup"); 
     } 

     [ClassCleanup()] 
     public static void ClassCleanup() 
     { 
      MessageBox.Show("ClassCleanup"); 
     } 

     [AssemblyCleanup()] 
     public static void AssemblyCleanup() 
     { 
      MessageBox.Show("AssemblyCleanup"); 
     } 

     [TestMethod()] 
     [ExpectedException(typeof(System.DivideByZeroException))] 
     public void DivideMethodTest() 
     { 
      DivideClass.DivideMethod(0); 
     } 
    } 
} 
Các vấn đề liên quan