|
|
連載:VSTSの単体テスト機能は本当に使えるのか?
第2回 アジャイル開発者から見たVSTSテスト機能
太陽システム株式会社 中西 庸文
(Microsoft MVP 2006 - Solutions Architect)
2006/09/20 |
|
|
3. 型チェックを行うためのアサーション
続いて、型チェックを行うためのアサーションの使い方を見てみよう。
using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace VSTSTestingFrameworkLearning.Tests
{
[TestClass]
public class TypeAssertsTest
{
[TestMethod]
public void 同型チェックが成功すべき()
{
string actual = "Test";
Assert.IsInstanceOfType(actual, typeof(string));
}
[TestMethod]
[ExpectedException(typeof(AssertFailedException))]
public void 同型チェックが失敗すべき()
{
string actual = "Test";
Assert.IsInstanceOfType(actual, typeof(int));
}
[TestMethod]
public void 異型チェックが成功すべき()
{
string actual = "Test";
Assert.IsNotInstanceOfType(actual, typeof(int));
}
[TestMethod]
[ExpectedException(typeof(AssertFailedException))]
public void 異型チェックが失敗すべき()
{
string actual = "Test";
Assert.IsNotInstanceOfType(actual, typeof(string));
}
}
}
|
|
型チェックのアサーションの使い方を学習するために記述したテスト・コード |
VSTSのテスティング・フレームワークの型チェックのアサーションでは、第1引数がactual(=実測地)で第2引数がexpected(=期待値)となっている点に注意する必要がある。
NUnitは型チェックのアサーションでも他のアサーションと同様に、第1引数がexpectedで第2引数がactualである。また、NUnitには型へのインスタンス代入の可否をチェックするためのIsAssingableFromメソッドとIsNotAssingableFromメソッドも用意されている。
4. 状態テストを行うためのアサーション
次に、状態テストを行うためのアサーションの使い方を見てみよう。
using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace VSTSTestingFrameworkLearning.Tests
{
[TestClass]
public class ConditionTestsTest
{
[TestMethod]
[ExpectedException(typeof(AssertInconclusiveException))]
public void テストの結論が出ないことを主張するために例外をスローすべき()
{
Assert.Inconclusive();
}
[TestMethod]
public void ブール値の真チェックが成功すべき()
{
Assert.IsTrue(true);
}
[TestMethod]
[ExpectedException(typeof(AssertFailedException))]
public void ブール値の真チェックが失敗すべき()
{
Assert.IsTrue(false);
}
[TestMethod]
public void ブール値の偽チェックが成功すべき()
{
Assert.IsFalse(false);
}
[TestMethod]
[ExpectedException(typeof(AssertFailedException))]
public void ブール値の偽チェックが失敗すべき()
{
Assert.IsFalse(true);
}
[TestMethod]
public void Nullチェックが成功すべき()
{
Assert.IsNull(null);
}
[TestMethod]
[ExpectedException(typeof(AssertFailedException))]
public void Nullチェックが失敗すべき()
{
Assert.IsNull(new object());
}
[TestMethod]
public void 非Nullチェックが成功すべき()
{
Assert.IsNotNull(new object());
}
[TestMethod]
[ExpectedException(typeof(AssertFailedException))]
public void 非Nullチェックが失敗すべき()
{
Assert.IsNotNull(null);
}
}
}
|
|
状態テストのアサーションの使い方を学習するために記述したテスト・コード |
VSTSのテスティング・フレームワークでは自動生成されたテスト・コードにおいて開発者にテストとして機能するアサーションの記述を促すために(自動生成されたテスト・コードではアサーションの記述までは行ってくれない)、例外をスローするInconclusiveメソッドが用意されている。
NUnitでは非数値チェックのためのIsNaNメソッド、文字列やコレクションの空チェックのためのIsEmptyメソッド、IsNotEmptyメソッドなど豊富な状態テストのアサーションも用意されているが、VSTSではこれらは用意されていない。
5. 文字列比較を行うためのアサーション
さらに、文字列比較を行うためのアサーションの使い方を見ていこう。
using System;
using System.Text.RegularExpressions;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace VSTSTestingFrameworkLearning.Tests
{
[TestClass]
public class StringAssertTest
{
[TestMethod]
public void 文字列に部分文字列が含まれているかどうかのチェックが成功すべき()
{
StringAssert.Contains("Test", "es");
}
[TestMethod]
[ExpectedException(typeof(AssertFailedException))]
public void 文字列に部分文字列が含まれているかどうかのチェックが失敗すべき()
{
StringAssert.Contains("Behaviour", "es");
}
[TestMethod]
public void 指定した部分文字列で始まっているかどうかのチェックが成功すべき()
{
StringAssert.StartsWith("Test", "T");
}
[TestMethod]
[ExpectedException(typeof(AssertFailedException))]
public void 指定した部分文字列で始まっているかどうかのチェックが失敗すべき()
{
StringAssert.StartsWith("Behaviour", "T");
}
[TestMethod]
public void 指定した部分文字列で終わっているかどうかのチェックが成功すべき()
{
StringAssert.EndsWith("Test", "t");
}
[TestMethod]
[ExpectedException(typeof(AssertFailedException))]
public void 指定した部分文字列で終わっているかどうかのチェックが失敗すべき()
{
StringAssert.EndsWith("Behaviour", "t");
}
[TestMethod]
public void 正規表現と一致するかどうかのチェックが成功すべき()
{
StringAssert.Matches("Test Driven Development", new Regex(@"\s+"));
}
[TestMethod]
[ExpectedException(typeof(AssertFailedException))]
public void 正規表現と一致するかどうかのチェックが失敗すべき()
{
StringAssert.Matches("TestDrivenDevelopment", new Regex(@"\s+"));
}
[TestMethod]
public void 正規表現と一致しないかどうかのチェックが成功すべき()
{
StringAssert.DoesNotMatch("TestDrivenDevelopment", new Regex(@"\s+"));
}
[TestMethod]
[ExpectedException(typeof(AssertFailedException))]
public void 正規表現と一致しないかどうかのチェックが失敗すべき()
{
StringAssert.DoesNotMatch("Test Driven Development", new Regex(@"\s+"));
}
}
}
|
|
文字列比較のアサーションの使い方を学習するために記述したテスト・コード |
VSTSのテスティング・フレームワークには正規表現を使用して文字列を比較するための強力なMatchesメソッドとDoesNotMactchメソッドが用意されているのに対して、NUnitには正規表現を使用できるアサーションは存在しない。
Insider.NET 記事ランキング
本日
月間