0

たとえば、テストメソッドのメソッドデコレータまたは属性のような方法またはアプローチはありますか:

「メソッド B を実行する前にメソッド C を実行する」

したがって、基本的にはCとBの間に依存関係を作成しています。テストはアトミックである方が良いことは知っていますが、テストを小さくしてポイントに保つ方が良い場合もあります。探しているアイテムが単にそこにない場合は、「RemoveItem」テスト メソッドを実行しないのが理にかなっています。

ほとんどの人は、事前にアイテムを追加してから、削除できるかどうかをテストします-「すべて同じテストで」。私はこのアプローチが好きではなく、テストをより小さく、よりポイントに合わせて、可能な限りアトミックにしたいと考えています。

4

2 に答える 2

1

削除をテストする前にアイテムを追加する必要がある場合は、アイテムを追加するのに最適な場所arrangeは削除テストの一部です。これにより、削除テストのコンテキストが明確になります。

ただし、ここでも DRY 原則が機能します。追加ロジックを別のヘルパー メソッドに移動できます。次に、追加をテストするときと、削除のためにコンテキストを配置するときに、2回呼び出します。

[Testclass]
public class Tests
{        
    [TestMethod]
    public void TestAddition()
    {
        AddItem();
        // Assert addition           
    }   

    [TestMethod]
    public void TestRemoval()
    {
       AddItem();
       // Remove item
       // Assert removal
    } 

    private void AddItem()
    {
       // Add item           
    }
}
于 2012-05-28T15:35:24.520 に答える
1

あなたが言ったように、テスト間の相互依存性は必要ありません。remove テストで「Remove」の前に「Add」があり、Add メソッドを間違った場所でテストすることに慣れていない場合は、testInitialize を使用して、テストが実行できるいくつかのオブジェクトをセットアップすることをお勧めします。ただし、Remove のテストでは、Remove を実行する前に Add を実際に実行することをお勧めします

[Testclass]
public class TestStacks
{
  private Stack<string> emptyStack;
  private Stack<string> singleItemStack;

  [TestInitialize]
  public void Setup()
  {
    singleItemStack = new Stack<string>();
    singleItemStack.Push("Item");
    emptyStack = new Stack<string>();
  }

  [TestMethod]
  public void TestPush()
  {       
    emptyStack.Push("Added");
    Assert.AreEqual(1, emptyStack.Count);
  }

  [TestMethod]
  public void TestRemove()
  {       
    singleItemStack.Pop();
    Assert.AreEqual(0, singleItemStack.Count);
  }  

  [TestMethod]
  [ExpectedException(typeof(InvalidOperationException))]
  public void TestPopFromEmpty()
  {       
    emptyStack.Pop();
  }  

}
于 2012-05-28T11:37:00.427 に答える