Make Moq Setup recognice an array with values
How do I make Moq Setup
recognise two arrays with the same values as equal?
I have this method that takes a list of strings as parameter.
class Hospital{
Patient GetPatients( DateTime dates ){
...
}
}
I setup a mock where I require the exact parameter.
var hospital= new Mock<Hospital>( MockBehavior.Strict );
hospital.Setup( m => m.GetPatients( new { new DateTime(2016,10,30) } ) );
Then, in my testee, I do the call.
hospital.GetPatients( new { date } ); // date is DateTime(2016,10,30).
It does not recognise my mock.
This is natural as Equals
does not consider two arrays equal.
But how do I make it?
c# moq
add a comment |
How do I make Moq Setup
recognise two arrays with the same values as equal?
I have this method that takes a list of strings as parameter.
class Hospital{
Patient GetPatients( DateTime dates ){
...
}
}
I setup a mock where I require the exact parameter.
var hospital= new Mock<Hospital>( MockBehavior.Strict );
hospital.Setup( m => m.GetPatients( new { new DateTime(2016,10,30) } ) );
Then, in my testee, I do the call.
hospital.GetPatients( new { date } ); // date is DateTime(2016,10,30).
It does not recognise my mock.
This is natural as Equals
does not consider two arrays equal.
But how do I make it?
c# moq
add a comment |
How do I make Moq Setup
recognise two arrays with the same values as equal?
I have this method that takes a list of strings as parameter.
class Hospital{
Patient GetPatients( DateTime dates ){
...
}
}
I setup a mock where I require the exact parameter.
var hospital= new Mock<Hospital>( MockBehavior.Strict );
hospital.Setup( m => m.GetPatients( new { new DateTime(2016,10,30) } ) );
Then, in my testee, I do the call.
hospital.GetPatients( new { date } ); // date is DateTime(2016,10,30).
It does not recognise my mock.
This is natural as Equals
does not consider two arrays equal.
But how do I make it?
c# moq
How do I make Moq Setup
recognise two arrays with the same values as equal?
I have this method that takes a list of strings as parameter.
class Hospital{
Patient GetPatients( DateTime dates ){
...
}
}
I setup a mock where I require the exact parameter.
var hospital= new Mock<Hospital>( MockBehavior.Strict );
hospital.Setup( m => m.GetPatients( new { new DateTime(2016,10,30) } ) );
Then, in my testee, I do the call.
hospital.GetPatients( new { date } ); // date is DateTime(2016,10,30).
It does not recognise my mock.
This is natural as Equals
does not consider two arrays equal.
But how do I make it?
c# moq
c# moq
edited Oct 30 '16 at 20:12
LosManos
asked Oct 30 '16 at 9:13
LosManosLosManos
3,48442767
3,48442767
add a comment |
add a comment |
2 Answers
2
active
oldest
votes
My solution was to (realise it is possible to) put a lambda in It.Is
like It.Is<>( => )
var hospital= new Mock<Hospital>( MockBehavior.Strict );
hospital.Setup( m => m.GetPatients(
It.Is<DateTime>( d => AreEqual(d) ) );
and a helper method
bool AreEqual( DateTime dates ){
return dates.Counts == 1
&& dates[0] == new DateTime( 2016, 10, 30 );
}
add a comment |
Maybe at the time you asked this question Moq did not have this implemented. But now it should work the way you wrote.
Moq does not use simple .Equal() method to verify if value are the same. It has a bit more complicated matching created. If it find IEnumerable then it uses .SequenceEqual()
Since Array is Ienumerable it should work for you.
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f40327561%2fmake-moq-setup-recognice-an-array-with-values%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
My solution was to (realise it is possible to) put a lambda in It.Is
like It.Is<>( => )
var hospital= new Mock<Hospital>( MockBehavior.Strict );
hospital.Setup( m => m.GetPatients(
It.Is<DateTime>( d => AreEqual(d) ) );
and a helper method
bool AreEqual( DateTime dates ){
return dates.Counts == 1
&& dates[0] == new DateTime( 2016, 10, 30 );
}
add a comment |
My solution was to (realise it is possible to) put a lambda in It.Is
like It.Is<>( => )
var hospital= new Mock<Hospital>( MockBehavior.Strict );
hospital.Setup( m => m.GetPatients(
It.Is<DateTime>( d => AreEqual(d) ) );
and a helper method
bool AreEqual( DateTime dates ){
return dates.Counts == 1
&& dates[0] == new DateTime( 2016, 10, 30 );
}
add a comment |
My solution was to (realise it is possible to) put a lambda in It.Is
like It.Is<>( => )
var hospital= new Mock<Hospital>( MockBehavior.Strict );
hospital.Setup( m => m.GetPatients(
It.Is<DateTime>( d => AreEqual(d) ) );
and a helper method
bool AreEqual( DateTime dates ){
return dates.Counts == 1
&& dates[0] == new DateTime( 2016, 10, 30 );
}
My solution was to (realise it is possible to) put a lambda in It.Is
like It.Is<>( => )
var hospital= new Mock<Hospital>( MockBehavior.Strict );
hospital.Setup( m => m.GetPatients(
It.Is<DateTime>( d => AreEqual(d) ) );
and a helper method
bool AreEqual( DateTime dates ){
return dates.Counts == 1
&& dates[0] == new DateTime( 2016, 10, 30 );
}
answered Oct 30 '16 at 20:18
LosManosLosManos
3,48442767
3,48442767
add a comment |
add a comment |
Maybe at the time you asked this question Moq did not have this implemented. But now it should work the way you wrote.
Moq does not use simple .Equal() method to verify if value are the same. It has a bit more complicated matching created. If it find IEnumerable then it uses .SequenceEqual()
Since Array is Ienumerable it should work for you.
add a comment |
Maybe at the time you asked this question Moq did not have this implemented. But now it should work the way you wrote.
Moq does not use simple .Equal() method to verify if value are the same. It has a bit more complicated matching created. If it find IEnumerable then it uses .SequenceEqual()
Since Array is Ienumerable it should work for you.
add a comment |
Maybe at the time you asked this question Moq did not have this implemented. But now it should work the way you wrote.
Moq does not use simple .Equal() method to verify if value are the same. It has a bit more complicated matching created. If it find IEnumerable then it uses .SequenceEqual()
Since Array is Ienumerable it should work for you.
Maybe at the time you asked this question Moq did not have this implemented. But now it should work the way you wrote.
Moq does not use simple .Equal() method to verify if value are the same. It has a bit more complicated matching created. If it find IEnumerable then it uses .SequenceEqual()
Since Array is Ienumerable it should work for you.
answered Nov 20 '18 at 18:09
Benas KikutisBenas Kikutis
236
236
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f40327561%2fmake-moq-setup-recognice-an-array-with-values%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown