我有一个测试方法,用于断言是否已调用客户帐户存储库的 CreateClient 方法。请参阅下面的测试。
[TestMethod]
public void CreateNewBasicClientAccount_NewBasicClient_CreatesNewClientBasicClient()
{
// Arrange
var clientAccountToCreate = new ClientAccount
{
Name = "Name",
};
var clientAccountToCreateDto = AutoMapper.Mapper.Map<ClientAccount, ClientAccountDto>(clientAccountToCreate);
var clientAccountRepository = A.Fake<IClientAccountRepository>();
var clientAccountManager = new ClientAccountManager(clientAccountRepository);
// Act
clientAccountManager.CreateClient(clientAccountToCreate);
// Assert
A.CallTo(
() => clientAccountRepository.CreateClient(A<ClientAccountDto>.That.IsNotNull<ClientAccountDto>()))
.MustHaveHappened();
A.CallTo(
() => clientAccountRepository.CreateClient(A<ClientAccountDto>.Ignored))
.MustHaveHappened();
A.CallTo(
() => clientAccountRepository.CreateClient(clientAccountToCreateDto))
.MustHaveHappened();
}
测试中我的 ClientAccountManager 类的 Act 部分正在调用存储库的 CreateClient 方法
public void CreateClient(ClientAccount client)
{
var clientDto = AutoMapper.Mapper.Map<ClientAccount, ClientAccountDto>(client);
_clientAccountRepository.CreateClient(clientDto);
}
测试中的前两个断言通过,但更具体的第三个断言失败并显示结果消息
InterfaceNameSpace.IClientAccountRepository.CreateClient(clientDto: DtoNameSpace.ClientAccountDto) Expected to find it at least once but found it #0 times among the calls:
ClientAccount 和 ClientAccountDto 类具有完全相同的属性。使失败的断言通过的输入将受到赞赏,因为代码已连接以使其通过,但它失败了。
最佳答案
这是因为实际的ClientAccountDto
传递给该方法的实例与您在测试中创建的实例不同,因此它们不被视为相等。
有几个选项可以解决这个问题:
- 覆盖
Equals
ClientAccountDto
中的方法(并不理想,因为 DTO 通常不需要这个) - 注入(inject)
IMapper
进入ClientAccountManager
,而不是使用静态Mapper
类,并配置IMapper
返回ClientAccountDto
的特定实例 测试
ClientAccountDto
的特定属性,像这样:A.CallTo( () => clientAccountRepository.CreateClient(A<ClientAccountDto>.That.Matches(x => x.Name == "Name"))) .MustHaveHappened();
无关说明:您不需要在 A<ClientAccountDto>.That.IsNotNull<ClientAccountDto>()
中再次指定类型,你可以写A<ClientAccountDto>.That.IsNotNull()
.
关于c# - 如何在 fake it easy 中正确断言 MustHaveHappend(object),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47764577/