MSTestV2 が選択肢に増えてた
◆ VS とは別の機能と切り離して nuget パッケージにしただけ?
久々に VS でテストプロジェクトを作ろうとしたらテストフレームワークの選択肢に MSTestV2 が増えていました
これまで v2 という選択肢はなかったはずです
VS は VisualStudio 2017 Express で昔作ったときは 2015 Express だったので 2017 の新機能かもしれません
使ってみたのですが テストコードの書き方や VS での実行方法や確認方法などに特に違いは感じられませんでした
内部の最適化とかでユーザの使い方には違いはないのかもしれません
それか 私が使う程度の機能だと高度なことしないので違いを感じていないだけかもです
とはいえ v2 という以上どこかに違いは存在するはずなので探してみると proj ファイルの定義が異なっていました
v2 でのみ存在するものはこういうのです
違いはファイルのあちこちに散らばってますが 見た感じでは nuget のパッケージをインストールしてるみたいです
テストプロジェクトを作った後に packages フォルダにMSTest のフォルダができていました
また package.config ファイルもあり
という中身でした
nuget パッケージを使っていて 使い方に差がないことから考えると VS 組み込みの機能だったのを切り離して nuget パッケージにしたのが v2 ということなのかもしれません
パッケージ化してしまえば VS を使わず .NET Core を使ってる環境でも実行できますしね
一応テストファイルです
using する名前空間も一緒で 自動生成されるテストファイルのクラス名やメソッド名の規則や それらsについてる属性も一緒でした
これまで v2 という選択肢はなかったはずです
VS は VisualStudio 2017 Express で昔作ったときは 2015 Express だったので 2017 の新機能かもしれません
使ってみたのですが テストコードの書き方や VS での実行方法や確認方法などに特に違いは感じられませんでした
内部の最適化とかでユーザの使い方には違いはないのかもしれません
それか 私が使う程度の機能だと高度なことしないので違いを感じていないだけかもです
とはいえ v2 という以上どこかに違いは存在するはずなので探してみると proj ファイルの定義が異なっていました
v2 でのみ存在するものはこういうのです
<Import Project="..\packages\MSTest.TestAdapter.1.2.0\build\net45\MSTest.TestAdapter.props" Condition="Exists('..\packages\MSTest.TestAdapter.1.2.0\build\net45\MSTest.TestAdapter.props')" />
<Reference Include="Microsoft.VisualStudio.TestPlatform.TestFramework, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\MSTest.TestFramework.1.2.0\lib\net45\Microsoft.VisualStudio.TestPlatform.TestFramework.dll</HintPath>
</Reference>
<Reference Include="Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\MSTest.TestFramework.1.2.0\lib\net45\Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions.dll</HintPath>
</Reference>
<None Include="packages.config" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<ErrorText>このプロジェクトは、このコンピューター上にない NuGet パッケージを参照しています。それらのパッケージをダウンロードするには、[NuGet パッケージの復元] を使用します。詳細については、http://go.microsoft.com/fwlink/?LinkID=322105 を参照してください。見つからないファイルは {0} です。</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('..\packages\MSTest.TestAdapter.1.2.0\build\net45\MSTest.TestAdapter.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\MSTest.TestAdapter.1.2.0\build\net45\MSTest.TestAdapter.props'))" />
<Error Condition="!Exists('..\packages\MSTest.TestAdapter.1.2.0\build\net45\MSTest.TestAdapter.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\MSTest.TestAdapter.1.2.0\build\net45\MSTest.TestAdapter.targets'))" />
</Target>
<Import Project="..\packages\MSTest.TestAdapter.1.2.0\build\net45\MSTest.TestAdapter.targets" Condition="Exists('..\packages\MSTest.TestAdapter.1.2.0\build\net45\MSTest.TestAdapter.targets')" />
違いはファイルのあちこちに散らばってますが 見た感じでは nuget のパッケージをインストールしてるみたいです
テストプロジェクトを作った後に packages フォルダにMSTest のフォルダができていました
また package.config ファイルもあり
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="MSTest.TestAdapter" version="1.2.0" targetFramework="net47" />
<package id="MSTest.TestFramework" version="1.2.0" targetFramework="net47" />
</packages>
という中身でした
nuget パッケージを使っていて 使い方に差がないことから考えると VS 組み込みの機能だったのを切り離して nuget パッケージにしたのが v2 ということなのかもしれません
パッケージ化してしまえば VS を使わず .NET Core を使ってる環境でも実行できますしね
一応テストファイルです
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace ConsoleApp1.Tests
{
[TestClass()]
public class Example1Tests
{
[TestMethod()]
public void method1Test()
{
Assert.AreEqual(3, new Example1().method1(1, 2));
}
}
}
using する名前空間も一緒で 自動生成されるテストファイルのクラス名やメソッド名の規則や それらsについてる属性も一緒でした