13

Có thể vượt qua giá trị của ký tự đại diện thử nghiệm ký tự đại diện cho dòng lệnh mstest.exe thay vì mã hóa cứng nhiều giá trị của trình kiểm tra không? Chẳng hạn nhưcontainer thử nghiệm ký tự đại diện để mstest. exe

MSTest.exe/testcontainer: kiểm tra .dll

Tôi muốn tự gọi MSTest trong TFS của chúng tôi năm 2012 nâng cấp template.xaml xây dựng processso tthat nó hoạt động như một cách Autodiscovery tương tự như các bài kiểm tra chạy theo mặc định template.xaml

Nếu không, điều này có thể được viết thành tập lệnh dơi để lặp qua các thư mục từ thư mục bắt đầu đã cho không?

Trả lời

24

MSTest không tham số ký tự đại diện cho người thử nghiệm (look here for a reference on the command line options). Tuy nhiên, nó có thể lấy nhiều đối số/đối tượng thử nghiệm, như sau:

mstest.exe /testcontainer:a.test.dll /testcontainer:b.tests.dll 

Bạn sẽ phải cung cấp thông số này theo cách khác. Điều này có thể được thực hiện bằng một tập tin thực thi, nhưng MSBuild có thể là một lựa chọn tốt hơn cho việc này:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="RunMSTest"> 

<ItemGroup> 
    <TestAssemblies Include="**\*Tests.dll"/> 
</ItemGroup> 

<Target Name="RunMSTest"> 
    <Exec Condition=" '@(TestAssemblies)' != ''" 
      Command="Mstest.exe @(TestAssemblies ->'/testcontainer:&quot;%(RecursiveDir)%(Filename)%(Extension)&quot;', ' ')" 
      /> 
</Target> 

</Project> 

(với nhờ https://stackoverflow.com/a/2770682/62662 cho transform)

Lưu i vào một tập tin (testall.proj), và chạy nó với MSBuild testall.proj, hoặc tạo một tập tin thực thi để chạy nó cho bạn. Cũng cần lưu ý rằng tải rất nhiều tất cả các bộ kiểm thử được cung cấp trong một miền ứng dụng, vì vậy chúng sẽ cần hỗ trợ cùng một mục tiêu nền tảng (bất kỳ cpu, x86, x64) nào.

+0

Tôi nghĩ rằng biến đổi có thể được thực hiện đơn giản bằng cách chỉ lấy Identity tài sản của mỗi hội đồng. Tôi cũng đã có một vấn đề với đường dẫn (kiểm tra dlls không trực tiếp dưới đây, nơi tập tin mục tiêu của tôi được lưu trữ), và điều này giải quyết vấn đề đó quá.

3

Nó cũng có thể sử dụng tập tin cmd để thu thập container bằng ký tự đại diện vào một biến duy nhất, và sau đó chạy MSTest với biến này mở rộng:

call "%VS100COMNTOOLS%vsvars32" 
@setlocal enabledelayedexpansion enableextensions 
@set list= 
@for %%x in (.\Bin\Debug\*Test.dll) do set list=!list! /testcontainer:%%x 
@set list=%list:~1% 

mstest %list% 
+1

có độ dài tối đa của dòng lệnh không? nếu có hàng trăm bài kiểm tra, nó vẫn hoạt động được không? –