Tôi đã có một vài trường hợp một cái gì đó như thế này sẽ hữu ích. Ví dụ: tôi có một số AccountCreator
với phương thức Create
mất NewAccount
. My AccountCreator
có IRepository
mà cuối cùng sẽ được sử dụng để tạo tài khoản. AccountCreator
của tôi trước tiên sẽ ánh xạ các thuộc tính từ NewAccount
đến Account
, giây vượt qua số Account
để repo cuối cùng tạo ra nó. thử nghiệm của tôi giống như thế này:Làm thế nào để sử dụng moq để xác minh rằng một đối tượng tương tự đã được chuyển vào làm đối số?
public class when_creating_an_account
{
static Mock<IRepository> _mockedRepository;
static AccountCreator _accountCreator;
static NewAccount _newAccount;
static Account _result;
static Account _account;
Establish context =() =>
{
_mockedRepository = new Mock<IRepository>();
_accountCreator = new AccountCreator(_mockedRepository.Object);
_newAccount = new NewAccount();
_account = new Account();
_mockedRepository
.Setup(x => x.Create(Moq.It.IsAny<Account>()))
.Returns(_account);
};
Because of =() => _result = _accountCreator.Create(_newAccount);
It should_create_the_account_in_the_repository =() => _result.ShouldEqual(_account);
}
Vì vậy, những gì tôi cần là một cái gì đó để thay thế It.IsAny<Account>
, bởi vì điều đó không giúp tôi xác nhận rằng đúng Tài khoản đã được tạo ra. Điều gì sẽ là tuyệt vời là một cái gì đó giống như ...
public class when_creating_an_account
{
static Mock<IRepository> _mockedRepository;
static AccountCreator _accountCreator;
static NewAccount _newAccount;
static Account _result;
static Account _account;
Establish context =() =>
{
_mockedRepository = new Mock<IRepository>();
_accountCreator = new AccountCreator(_mockedRepository.Object);
_newAccount = new NewAccount
{
//full of populated properties
};
_account = new Account
{
//matching properties to verify correct mapping
};
_mockedRepository
.Setup(x => x.Create(Moq.It.IsLike<Account>(_account)))
.Returns(_account);
};
Because of =() => _result = _accountCreator.Create(_newAccount);
It should_create_the_account_in_the_repository =() => _result.ShouldEqual(_account);
}
Thông báo tôi đã thay đổi It.IsAny<>
để It.IsLike<>
và thông qua trong một đối tượng dân cư Account
. Lý tưởng nhất, trong nền, một cái gì đó sẽ so sánh các giá trị tài sản và để cho nó vượt qua nếu tất cả chúng phù hợp.
Vì vậy, nó đã tồn tại chưa? Hoặc có thể đây là điều bạn đã làm trước đây và không ngại chia sẻ mã?
Moq hỗ trợ quẹt tùy chỉnh - như trong, bạn có thể có Người đối chiếu tùy chỉnh sử dụng khi phù hợp với lập luận cho một cuộc gọi , nhưng bạn phải tự mình thực hiện. Xem ví dụ [tại đây] (http://stackoverflow.com/a/10300051/343266). –