|
|
|
|
˵<EFBFBD><EFBFBD>
|
|
|
|
|
============
|
|
|
|
|
## <20><><EFBFBD>ԣ<EFBFBD><D4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>쳣
|
|
|
|
|
|
|
|
|
|
<EFBFBD>߰汾ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> Assert.NotThrow() <20><><EFBFBD>ԣ<EFBFBD>ʹ<EFBFBD>ö<EFBFBD><C3B6><EFBFBD> "<22><><EFBFBD><EFBFBD><EFBFBD>ϲ<EFBFBD><CFB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>쳣" <20>Ƚ<EFBFBD><C8BD><EFBFBD><EFBFBD>ѡ<EFBFBD>
|
|
|
|
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
+ ʹ<><CAB9> xUnit <20>Դ<EFBFBD> Record <20><>ͨʵ<CDA8><CAB5>
|
|
|
|
|
```csharp
|
|
|
|
|
//<2F><>ִ<EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
Action codeSnippet = () =>
|
|
|
|
|
{
|
|
|
|
|
//ҵ<><D2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
//ģ<><C4A3><EFBFBD>쳣
|
|
|
|
|
//throw new Exception("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>׳<EFBFBD><D7B3><EFBFBD><EFBFBD>쳣<EFBFBD><ECB3A3>");
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
var exception = Record.Exception(codeSnippet);
|
|
|
|
|
Assert.Null(exception);
|
|
|
|
|
```
|
|
|
|
|
+ ʹ<><CAB9> FluentAssertions <20><>
|
|
|
|
|
```csharp
|
|
|
|
|
//<2F><>ִ<EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
Action codeSnippet= () =>
|
|
|
|
|
{
|
|
|
|
|
//ҵ<><D2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
//ģ<><C4A3><EFBFBD>쳣
|
|
|
|
|
//throw new Exception("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>׳<EFBFBD><D7B3><EFBFBD><EFBFBD>쳣<EFBFBD><ECB3A3>");
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD>ԣ<EFBFBD><D4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>쳣
|
|
|
|
|
codeSnippet.Should().NotThrow();
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## <20><><EFBFBD>ԣ<EFBFBD><D4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(ִ<>й<EFBFBD>һ<EFBFBD>ε<EFBFBD>)
|
|
|
|
|
Ŀǰû<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Է<EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD> ִ<>й<EFBFBD> ִֻ<D6BB><D6B4>һ<EFBFBD><D2BB> <20><><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4>һ<EFBFBD><D2BB>),<2C><><EFBFBD><EFBFBD>һЩ<D2BB><D0A9>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
+ ʹ<><CAB9> Moq <20>⣬<EFBFBD><E2A3AC><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"ģ<><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",<2C><><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD><EFBFBD>鷽<EFBFBD><E9B7BD><EFBFBD><EFBFBD><EFBFBD>ӿڷ<D3BF><DAB7><EFBFBD>
|
|
|
|
|
```csharp
|
|
|
|
|
public class Person
|
|
|
|
|
{
|
|
|
|
|
public string Name { get; set; }
|
|
|
|
|
public int Id { get; set; }
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>鷽<EFBFBD><E9B7BD><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD>
|
|
|
|
|
/// </summary>
|
|
|
|
|
public virtual void DoSomething()
|
|
|
|
|
{
|
|
|
|
|
Console.WriteLine("<22><><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
using Moq;
|
|
|
|
|
namespace WatchStudy.CancellationTokenStudy
|
|
|
|
|
{
|
|
|
|
|
public class UnitTest1
|
|
|
|
|
{
|
|
|
|
|
//<2F><><EFBFBD>Է<EFBFBD><D4B7><EFBFBD>
|
|
|
|
|
[Fact]
|
|
|
|
|
public void Test1()
|
|
|
|
|
{
|
|
|
|
|
//ģ<>ⷽ<EFBFBD><E2B7BD>
|
|
|
|
|
var mock = new Mock<Person>();
|
|
|
|
|
mock.Setup(foo => foo.DoSomething());
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD>÷<EFBFBD><C3B7><EFBFBD>һ<EFBFBD><D2BB>
|
|
|
|
|
mock.Object.DoSomething();
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD> DoSomething <20><><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4>һ<EFBFBD><D2BB>
|
|
|
|
|
mock.Verify(foo => foo.DoSomething(), Times.Once());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
```
|