Как я говорю MSTEST выполнять все тестовые проекты в Решении?

Еще один способ задуматься над вопросом. Чтобы объединить два или более массивов, нужно составить список всех элементов каждого массива, а затем построить новый массив. Это звучит как создать List<T>, а затем вызывает toArray для него. Некоторые другие ответы используют ArrayList, и это нормально. Но как насчет реализации нашего? Это не сложно:

private static <T> T[] addAll(final T[] f, final T...o){
    return new AbstractList<T>(){

        @Override
        public T get(int i) {
            return i>=f.length ? o[i - f.length] : f[i];
        }

        @Override
        public int size() {
            return f.length + o.length;
        }

    }.toArray(f);
}

Я полагаю, что вышеупомянутое эквивалентно решениям, которые используют System.arraycopy. Однако я думаю, что у этого есть своя собственная красота.

20
задан Aza 11 April 2013 в 06:11
поделиться

6 ответов

Я бы просто написал цель, которая вызывает ее так, как вы хотите, а затем создаю пакетный файл, который вызывает цель, содержащую все тестируемые DLL.

Если вы не добавляете тестовые проекты все время, вам очень редко придется его изменять.

-1
ответ дан 30 November 2019 в 01:26
поделиться

Почему бы просто не заставить msbuild вывести все тестовые сборки в папку.

Попробуйте установить свойства OutputPath, OutputDir, OutDir в msbuild для этого.

затем запустите mstest для всех сборки в этой папке.

-1
ответ дан 30 November 2019 в 01:26
поделиться

Чтобы уточнить ответ ВладВ и сделать его немного более конкретным, следуя предложенному соглашению об именах, выполнение ваших тестов можно легко автоматизировать с помощью MSBuild . Следующий фрагмент из файла msbuild моего текущего проекта делает именно то, что вы просили.

<Target Name="GetTestAssemblies">
    <CreateItem
        Include="$(WorkingDir)\unittest\**\bin\$(Configuration)\**\*Test*.dll"
        AdditionalMetadata="TestContainerPrefix=/testcontainer:">
       <Output
           TaskParameter="Include"
           ItemName="TestAssemblies"/>
    </CreateItem>
</Target>
<!-- Unit Test -->
<Target Name="Test" DependsOnTargets="GetTestAssemblies">
    <Message Text="Normal Test"/>
<Exec 
    WorkingDirectory="$(WorkingDir)\unittest"
    Command="MsTest.exe @(TestAssemblies->'%(TestContainerPrefix)%(FullPath)',' ') /noisolation /resultsfile:$(MSTestResultsFile)"/>
    <Message Text="Normal Test Done"/>
</Target>

Кроме того, интеграция MsBuild с CruiseControl - это кусок пирога.

Edit
Вот как вы можете «вызвать» msbuild из вашего ccnet.config.

Сначала, если вы еще не используете MSBuild для автоматизации сборки, добавьте следующий xml вокруг представленного фрагмента ранее:

<Project DefaultTargets="Build"
    xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    ..... <insert snippet here> .....
</Project>

Сохраните это, например, в RunTests.proj рядом с вашим решением в дереве исходных текстов. Теперь вы можете изменить бит ccnet.config выше на следующее:

<msbuild>
  <executable>C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\MSBuild.exe</executable>
  <workingDirectory>C:\projects\mysolution\</workingDirectory>
  <baseDirectory>C:\projects\mysolution\</baseDirectory>  
  <projectFile>RunTests.proj</projectFile>
  <targets>Test</targets>
  <timeout>600</timeout>
  <logger>C:\Program Files\CruiseControl.NET\server\ThoughtWorks.CruiseControl.MsBuild.dll</logger>
</msbuild>
10
ответ дан 30 November 2019 в 01:26
поделиться

You could enforce some convention on the naming and location of test projects, then you could run MSTest on, say, all *Test.dll below the location of your solution.

As far as I know, there is no way to tell a test project from a 'normal' DLL project based soleley on a solution file. So, an alternative could be to analyze the project files and/or .vsmdi files to find the test projects, but that could be rather tricky.

0
ответ дан 30 November 2019 в 01:26
поделиться

Я не знаю напрямую, но здесь VSMDI [fx: плюется в угол] может помочь. В своем решении добавьте все тесты в VSMDI. А затем передайте VSMDI в mstest, используя /testmetadata.[1283 impression, однако я бы посоветовал вам следовать приведенным выше соглашениям. И используйте соглашение об именах и выгрузите его из файла SLN, используя, скажем, цикл for в командном сценарии

0
ответ дан 30 November 2019 в 01:26
поделиться

Я знаю, что эта тема довольно старая, но она все еще высоко в Google, поэтому я подумал, что смогу помочь одному или двум. В любом случае, поскольку нет удовлетворительного решения для этого. Я написал задачу msbuild для этого. Подробности можно найти здесь: http://imistaken.blogspot.com/2010/08/running-all-tests-in-solution.html

1
ответ дан 30 November 2019 в 01:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: