मेरे पास कुछ मौके हैं जहां ऐसा कुछ उपयोगी होगा। उदाहरण के लिए, Create
विधि के साथ है जो NewAccount
लेता है। मेरा AccountCreator
में IRepository
है जिसका अंततः खाता बनाने के लिए उपयोग किया जाएगा। मेरा AccountCreator
पहले गुणों को NewAccount
से Account
पर मानचित्र करेगा, दूसरा इसे Account
को रेपो में अंत में बनाने के लिए पास करेगा। ,यह सत्यापित करने के लिए moq का उपयोग कैसे करें कि एक समान ऑब्जेक्ट को तर्क के रूप में पारित किया गया था?
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);
}
तो, मैं क्या जरूरत है कुछ It.IsAny<Account>
को बदलने के लिए है, क्योंकि है कि मुझे तो सत्यापित करें कि सही खाता बनाया गया था मदद नहीं करता है: मेरा परीक्षण कुछ इस तरह दिखाई। क्या अद्भुत होगा कुछ की तरह है ...
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);
}
सूचना मैं It.IsLike<>
को It.IsAny<>
बदल गया है और एक आबादी वाले Account
वस्तु में पारित कर दिया। आदर्श रूप से, पृष्ठभूमि में, कुछ संपत्ति मूल्यों की तुलना करेगा और अगर वे सभी मेल खाते हैं तो इसे पारित कर दें।
तो, क्या यह पहले से मौजूद है? या हो सकता है कि यह कुछ ऐसा हो जो आपने पहले किया है और कोड साझा करने में कोई दिक्कत नहीं होगी?
Moq कस्टम matchers का समर्थन करता है - के रूप में, आप जब एक कॉल के लिए बहस मिलान इस्तेमाल किया कस्टम comparers हो सकता है , लेकिन आपको इसे स्वयं लागू करना होगा। उदाहरण देखें [यहां] (http://stackoverflow.com/a/10300051/343266)। –