単純なロジックが 80%、複雑なロジックが 20% のプロジェクトで TDD を実行しています。特定のメソッドがエラーをスローし、それを行う正しい方法について疑問に思っている場合、私は自分自身が多くのテストを行っていることに気づきます。NUnit と JustMock を使用しています。
これには2つの方法があります。ExpectedException 属性を使用し、型を指定します。または以下のように書く。以下のように書くことのプロは、例外.メッセージをアサートすることもでき(カスタムのものを作成した場合)、テストが失敗した場合も例外.メッセージが表示されることです。しかし、私はあなたがどのようにそれを行うかを他の人に確認したかった. 要約すると:
- このような例外に対して多くのテストを行うのは普通ですか?
- これは正しい方法ですか:
説明するだけ:サプライヤーは特定の契約を提供し、部門は1つの契約を受け入れますが、同じサプライヤーと複数の契約を持つことはできません(もちろん、異なるサプライヤーと異なる契約を持つことはできます)
[Test]
public void Accepting_more_than_one_contract_from_supplier_throws_exception()
{
//Arrange
var department = new Department(Guid.NewGuid(), "1234");
var supplier = Mock.Create<Supplier>();
var contract1 = Mock.Create<DeliveryContract>();
var contract2 = Mock.Create<DeliveryContract>();
var id = Guid.NewGuid();
supplier.Arrange(x => x.Id).Returns(id);
contract1.Arrange(x => x.Supplier).Returns(supplier);
contract2.Arrange(x => x.Supplier).Returns(supplier);
//Act
department.AcceptContract(contract1);
//Assert
try
{
department.AcceptContract(contract2);
Assert.Fail("Duplicate contract with supplier did not throw an exception");
}
catch (Exception ex)
{
Assert.AreEqual(typeof(ArgumentException),ex.GetType(),ex.Message);
}
}