cfs*_*cfs 0 c# tdd nunit unit-testing domain-driven-design
我在一个80%简单逻辑和20%复杂逻辑的项目上做TDD.如果certaing方法抛出错误并想知道正确的方法,我发现自己经常测试.我使用NUnit和JustMock.
我有两种方法可以做到这一点.使用ExpectedException属性,并指定类型.或写作如下.写下面的专业人员是我也可以断言exception.message(如果我已经自定义了),如果测试失败,我也会得到例外消息.但是我想和别人一起检查你是怎么做的.总结一下:
只是解释:供应商提供某些合同,部门接受一份合同但不能与同一供应商签订一份以上的合同(但是cource可以与不同的供应商签订不同的合同)
[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);
}
}
Run Code Online (Sandbox Code Playgroud)
你可以使用Assert.Throws方法:
Assert.Throws<ArgumentException>(() => department.AcceptContract(contract2));
Run Code Online (Sandbox Code Playgroud)
要么
Assert.Throws<ArgumentException>(() => department.AcceptContract(contract2), "some message");
Run Code Online (Sandbox Code Playgroud)