2009-06-16 16 views
6

Tôi đang cố gắng thực hiện một số thử nghiệm web tự động cho ứng dụng ASP.NET của mình. Tôi đã hy vọng sử dụng thuộc tính AutoRollback từ tiện ích mở rộng Xunit.net để hoàn tác bất kỳ thay đổi cơ sở dữ liệu nào đã được thực hiện trong khi thử nghiệm. AutoRollback sử dụng TransactionScope để bắt đầu một giao dịch trước khi thử nghiệm và cuộn nó trở lại sau đó.Có thể sử dụng rollback TransactionScope với Selenium hoặc Watin không?

Khi tôi cố gắng truy cập ứng dụng web của mình trong một giao dịch, nó luôn luôn hết thời gian chờ. Có vẻ như điều này sẽ có tác dụng, bất kỳ ý tưởng nào? Đây là thử nghiệm của tôi:

[Fact] 
[AutoRollback] 
public void Entity_should_be_in_list() 
{ 
    Entity e = new Entity 
    { 
     Name = "Test", 
    }; 
    dataContext.Entities.InsertOnSubmit(e); 
    dataContext.SubmitChanges(); 

    selenium.Open("http://localhost/MyApp"); 
    Assert.True(selenium.IsTextPresent("Test")); 
} 

Trả lời

5

Ứng dụng ASP.NET của bạn có bối cảnh cơ sở dữ liệu riêng và không có ý tưởng rằng bạn muốn tham gia giao dịch bắt đầu bởi Xunit.net. Rõ ràng, cơ sở dữ liệu khóa một số tài nguyên khi giao dịch bắt đầu; ứng dụng web chờ đợi kiên nhẫn một thời gian và cuối cùng bỏ cuộc.

Tôi nghĩ đặt cược tốt nhất của bạn là bắt đầu từ cơ sở dữ liệu trống và sử dụng tập lệnh SQL để tạo lược đồ và điền bảng tra cứu (cơ sở dữ liệu của bạn là under source control, phải không?). Một cách tiếp cận khác là sao lưu cơ sở dữ liệu trước khi chạy thử nghiệm và sau đó khôi phục lại sau khi hoàn thành.

+0

Bạn biết đấy, điều đó dường như rất hiển nhiên khi bạn nói điều đó :) Tôi đã hy vọng tránh việc xây dựng và xé cơ sở dữ liệu mọi lúc, nhưng tôi đoán là tôi bị mắc kẹt với nó. –

+0

Bạn cần tìm cách bật hỗ trợ giao dịch trong LINQ to SQL để có thể tham gia vào phạm vi giao dịch hiện tại. –

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