テストしたいプロパティがたくさんあるオブジェクトがあります。TestMethod
プロパティごとにを記述しましたが、問題は、プロパティの多くが設定時に他のプロパティを操作することです。必要なのは、テストオブジェクトを設定し、変数の1つを操作し、テストを実行し、オブジェクトを元の状態にリセットしてから、プロセスを繰り返すことができるようにすることです。そうすれば、冗長性をあまり持たないようにすることができます。
DataSource
データドリブンアプローチ(この問題の完璧な解決策)を使用することを検討しましたが、属性を使用する方法が見つからないため、Silverlightテストフレームワークでは使用できないようです。従来のMSTestフレームワークを介してにアクセスできるかどうかを確認しようと考えましたDataSource
が、残念ながら、私はVisualStudioExpressしか持っていません。
この問題を解決できるかどうかを確認するために、カスタムテストハーネスの作成を検討しようと考えましたが、最初に提案を求めたいと思いました。
たぶん、私はそれを吸い上げて、すべての異なる構成を別々のTestInitialize
メソッドとして書き、必要のないものをコメントアウトする必要があります。
どんな助けでも大歓迎です。
更新/明確化:
テストするオブジェクトがどのように機能するかの例を次に示します。位置座標と各辺の座標を持つ形状があるとします。位置またはいずれかの辺の座標を更新するときは、他のすべての座標も更新する必要があります。
これはテスト中の機能です。ClassInitialize
私がやりたいのは、オブジェクトの初期値と期待されるテスト結果を含むモックを設定し、問題のプロパティの1つを変更する、複数の初期化を(または何を使用して)設定できるようにすることです。このようなもの(これは説明のみを目的としているため、不適切な慣行xDは無視してください):
// class under test (mock has the same properties & constructor)
public class MySquare
{
public Vector2 XYPosition;
public int Width;
public int Height;
public float TopSidePosition;
public float RightSidePosition;
...
public MySquare(float x, float y, int width, int height)
{
// set up all properties
}
}
// test object container
public class Container
{
public static MySquare square;
public static MySquareMock squareMock;
}
// desired test class initializations (it would be nice to be able to run each of these
// as well as the TestMethods and then reset to the next TestSetupClass)
[TestClass]
public class TestSetupClass1
{
[ClassInitialize]
public void SetupTest()
{
// set up initial value and expected result
Container.square = new MySquare(0, 0, 5, 5);
Container.squareMock = new MySquareMock(1, 1, 5, 5);
Container.square.XYPosition = new Vector2(1, 1);
}
}
[TestClass]
public class TestSetupClass2
{
[ClassInitialize]
public void SetupTest()
{
// set up initial value and expected result
Container.square = new MySquare(0, 0, 5, 5);
Container.squareMock = new MySquareMock(1, 0, 5, 5);
Container.square.RightSidePosition = 6;
}
}
// test methods
[TestClass]
public class TestMethods
{
[TestMethod]
public void TestPosition()
{
Assert.AreEqual(Container.squareMock.XYPosition, Container.square.XYPosition);
}
[TestMethod]
public void TestTopSidePosition()
{
Assert.AreEqual(Container.squareMock.XYTopSidePosition, Container.square.TopSidePosition);
}
// test method for each property
}