あなたの「並べ替え」のメソッドをテストしたい場合は、各ソートアルゴリズムのための独立したユニットテストを持っている必要があります。例
[TestMethod]
public void MergeSort_SortUnderorderedList_ShouldSortListCorrectly()
{
// Arrange
ISort sort = new MergeSort();
// Act
int[] sortedList = sort.Sort(new int[] { 4, 2, 18, 5, 19 });
// Assert
Assert.AreEqual(2, sortedList[0]);
Assert.AreEqual(4, sortedList[1]);
Assert.AreEqual(5, sortedList[2]);
Assert.AreEqual(18, sortedList[3]);
Assert.AreEqual(19, sortedList[4]);
}
[TestMethod]
public void QuickSort_SortUnderorderedList_ShouldSortListCorrectly()
{
// Arrange
ISort sort = new QuickSort();
// Act
int[] sortedList = sort.Sort(new int[] { 4, 2, 18, 5, 19 });
// Assert
Assert.AreEqual(2, sortedList[0]);
Assert.AreEqual(4, sortedList[1]);
Assert.AreEqual(5, sortedList[2]);
Assert.AreEqual(18, sortedList[3]);
Assert.AreEqual(19, sortedList[4]);
}
あなたがにソートアルゴリズムを注入クラスのテストを書いているために、あなたはソートアルゴリズムは、そのテストで正常に動作するかどうかをテストするべきではありません。その代わりに、ソートアルゴリズムモックを注入し、Sort()
メソッドが呼び出されていることをテストする必要があります(ただし、そのテストでのソートアルゴリズムの正しい結果はテストされません)。この例では、
public class MyClass
{
private readonly ISort sortingAlgorithm;
public MyClass(ISort sortingAlgorithm)
{
if (sortingAlgorithm == null)
{
throw new ArgumentNullException("sortingAlgorithm");
}
this.sortingAlgorithm = sortingAlgorithm;
}
public void DoSomethingThatRequiresSorting(int[] list)
{
int[] sortedList = this.sortingAlgorithm.Sort(list);
// Do stuff with sortedList
}
}
[TestClass]
public class MyClassTests
{
[TestMethod]
public void DoSomethingThatRequiresSorting_SomeCondition_ExpectedResult()
{
// Arrange - I assume that you need to use the result of Sort() in the
// method that you're testing, so the Setup method causes sortingMock
// to return the specified list when Sort() is called
ISort sortingMock = new Mock<ISort>();
sortingMock.Setup(e => e.Sort().Returns(new int[] { 2, 5, 6, 9 }));
MyClass myClass = new MyClass(sortingMock.Object);
// Act
myClass.DoSomethingThatRequiresSorting(new int[] { 5, 9, 2, 6 });
// Assert - check that the Sort() method was called
myClass.Verify(e => e.Sort(It.IsAny<int[]>));
}
}
Parametrisedテストは[こちら]オプションであってもよいが、読み取りを持っている可能性があざける行うために部品番号を使用しています
(http://stackoverflow.com/questions/9021881/how-to-run- MsTestを使用するのは簡単ではないということについては、mstest-a-test-method-multiple-parameters-in-mstestを使用してください。 – kayess
@kayessこれは興味深いです – Pacchy