2010-12-06 30 views
40

Visual Studio 2010, máy x64, sử dụng máy chủ web tích hợp để lưu trữ dịch vụ WCF với một bộ kiểm tra đơn vị sử dụng khung kiểm tra tích hợp sẵn.Tệp Xml không sao chép để kiểm tra thư mục đầu ra

Tôi có tệp XML mà các thử nghiệm của tôi cần tải để chạy. Tôi đã đưa tệp này vào dự án thử nghiệm và đặt tệp thành 'nội dung' và 'luôn sao chép sang thư mục đầu ra'. Tệp này sao chép vào thư mục bin \ debug.

Khi tôi thực hiện các thử nghiệm, tuy nhiên, tệp xml không có ở đó. Thay vì tìm trong thư mục bin \ debug của dự án, nó tìm nó trong thư mục làm việc của bài kiểm tra, C: \ Projects \ SAP Reapprovals \ TestResults \ name_machine 2010-12-06 13_45_43 \ Out ". Tệp chưa được sao chép ở đó .

có cách nào để buộc tập tin này để sao chép, hay tôi cần phải hội đủ điều kiện đầy đủ các tài liệu tham khảo từ bên trong thử nghiệm?

TIA!
James


cập nhật
Tôi đặt số đăng ký DeploymentItem ute, nhưng tệp vẫn không sao chép. Nhưng mà chắc chắn trông giống như những gì tôi muốn ... bất kỳ ý tưởng tại sao mà không hoạt động?

Mã của tôi kiểm tra:

[TestMethod] 
[DeploymentItem("SAP - GS3 format.xml")] 
public void TestProcessSapRoles() { 

    // I get a 'file not found' error here, and when 
    // I check the output directory, it isn't there 
    XElement rolesRoot = XElement.Load("SAP - GS3 format.xml"); 

} 


TRẢ LỜI:
Cảm ơn đi ra ngoài để CPedros, với sự giúp đỡ của ông tôi đã phóng to về vấn đề này một chút. Tôi đã chạy Process Monitor của SysInternals, để xem nó đang tìm tập tin xml của tôi ở đâu. Đây là những gì tôi thấy:

Khi tôi chạy các bài kiểm tra sử dụng ctrl + r, ctrl + t (kiểm tra debug trong bối cảnh hiện nay), visual studiolờ cácDeploymentItem thuộc tính hoàn toàn và thậm chí còn không hãy thử để sao chép tệp ở mọi nơi. Trong trường hợp này, tôi có ngoại lệ "Không tìm thấy tệp" khi tôi cố mở nó để đọc. Visual studio tạo một thư mục làm việc tạm thời cho các bài kiểm tra, nhưng chỉ có một tệp trong đó, AgentRestart.dat.

Khi tôi chạy thử nghiệm bằng cách sử dụng nút 'Chạy thử nghiệm đơn vị' trên thanh công cụ của tôi (không chắc chắn tùy chọn kiểm tra), Visual Studio không sao chép tệp, nhưng tham chiếu trực tiếp từ thư mục dự án. Bài kiểm tra đã trôi qua và không có thư mục làm việc tạm thời nào được tạo.

Khi tôi chạy thử nghiệm từ tùy chọn trình đơn "chạy -> thử nghiệm trong ngữ cảnh hiện tại" (chạy, không gỡ lỗi), thư mục làm việc tạm thời đã được tạo và tệp xml và tất cả tệp thi hành được sao chép vào đó. Thử nghiệm đã trôi qua.

Khi tôi chỉnh sửa Local.testsettings (trong thư mục Các thư mục giải pháp trong thư mục kiểm tra của tôi), tôi đã chọn 'Triển khai' từ menu bên trái và thêm tệp xml. Nó đã được thêm vào như [thư mục giải pháp] \ [thư mục dự án] \ file.xml. Tôi đã xóa thuộc tính DeploymentItem. Bây giờ tôi đã có thể gỡ lỗi các bài kiểm tra; tệp xml và tất cả các tệp thực thi được sao chép vào thư mục tạm thời được tạo cho thử nghiệm.

TLDR: Visual Studio bỏ qua thuộc tính DeploymentItem cho các cách nhất định chạy thử nghiệm.Giải pháp là chỉnh sửa Local.testsettings, menu Deployment và thêm tệp bằng tay.

Cảm ơn sự giúp đỡ! Tôi cho tín dụng CPedros cho câu trả lời của mình, vì nó là hữu ích nhất trong việc giải quyết vấn đề này.

+3

Cập nhật tuyệt vời, bạn là một ngôi sao tuyệt đối !! Tôi sẽ upvote nhiều hơn nếu tôi có thể ... – MalcomTucker

+1

Chạy thử nghiệm đơn vị đã làm các trick cho tôi. Câu hỏi hay. Cảm ơn –

+1

@James B Đối mặt với tất cả điều này với phiên bản Visual Studio 2012 Express, gần đây đã được nâng cấp từ .NET 2.0 lên .NET 4.5. Chỉ muốn chứng minh rằng SO thực sự là kho lưu trữ thông tin hữu ích lâu dài. Bản cập nhật của bạn thực sự giúp tôi xử lý việc này. – DavidHyogo

Trả lời

20

Cố gắng chú thích thử nghiệm của bạn với các thuộc tính DeploymentItem: http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.testtools.unittesting.deploymentitemattribute(v=VS.100).aspx

Dưới đây là một đoạn mã từ tài liệu:

[TestClass] 
    public class UnitTest1 
    { 
     [TestMethod()] 
     [DeploymentItem("testFile1.txt")] 
     public void ConstructorTest() 
     { 
      // Create the file to deploy 
      Car.CarInfo(); 
      string file = "testFile1.txt"; 
      // Check if the created file exists in the deployment directory 
      Assert.IsTrue(File.Exists(file), "deployment failed: " + file + 
       " did not get deployed"); 
     } 
    } 
+0

cpedros> Tôi cập nhật câu hỏi của mình ... về cơ bản, có vẻ như những gì bạn đang nói là những gì tôi muốn nhưng một số lý do nó vẫn không sao chép. Bất kỳ ý tưởng nào tại sao điều đó sẽ không hiệu quả? –

+1

@James B. Ký hiệu DeploymentItem ("file.txt") phụ thuộc vào tệp đang có sẵn tại RelativePathRoot được định nghĩa trong .testrunconfig. Đây có thể không phải là vị trí dự án thử nghiệm của bạn, trong trường hợp đó bạn có thể cần DeploymentItem ("YourTestProject \\ file.txt") –

+0

Xem chi tiết này: http://msdn.microsoft.com/vi-us/library/microsoft.visualstudio.testtools.unittesting.deploymentitemattribute (v = VS.100) .aspx –

0

Tôi đã vật lộn với deploymentattribute trong một thời gian và có fi nally chỉ từ bỏ. Thay vào đó tôi chỉ bằng tay sao chép tác phẩm của tôi trên vào một thư mục kiểm tra và sau đó xóa chúng một lần hoàn thành:

địa điểm

Testfile:

Private _locationOfTestFilesToBeCopied As String = "C:\...\TestFilesToBeCopied" 
Private _locationOfTestFiles As String = "C:\...\TestFiles" 

Initialize phương pháp:

<TestInitialize()> 
Public Sub Setup() 
    DeleteCopiedTestFiles() 
    CopyTestFilesToTestDirectory() 
End Sub 

Sao chép và xóa các phương pháp:

Private Sub CopyTestFilesToTestDirectory() 
    Dim sourceDirectory As New DirectoryInfo(_locationOfTestFilesToBeCopied) 

    For Each fileInfo As FileInfo In sourceDirectory.GetFiles 
     fileInfo.CopyTo(_locationOfTestFiles & "\" & fileInfo.Name, True) 
    Next 

    sourceDirectory = Nothing 
End Sub 

Private Sub DeleteCopiedTestFiles() 
    Dim sourceDirectory As New DirectoryInfo(_locationOfTestFiles) 

    For Each fileInfo As FileInfo In sourceDirectory.GetFiles 
     fileInfo.Delete() 
    Next 

    sourceDirectory = Nothing 
End Sub 

Tôi thấy điều này hoạt động tốt

0

Tôi đang đối mặt với vấn đề như, một trong các tệp của tôi không được sao chép vào thư mục ra ngay cả khi tôi đã nhập tên tệp đó trong local.testSettings và đặt thuộc tính là "Sao chép Luôn luôn".

bước sau đã giải quyết vấn đề của tôi:

  1. mở thử nghiệm đơn
  2. Chọn Cài đặt thử nghiệm
  3. Chọn tùy chọn "Chọn thử nghiệm Cài đặt file"
  4. Chọn tập tin .testsettings của bạn từ mở Cài đặt tập tin cửa sổ
  5. Đảm bảo rằng tệp .testsettings đã chọn được chọn trong Kiểm tra -> Cài đặt thử nghiệm

Hy vọng điều này sẽ giúp ích một số.

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