These are chat archives for Snaipe/Criterion

4th
Mar 2016
Dominik
@kaidowei
Mar 04 2016 09:33
hi
just to be clear: mmk_when adds a call and verify checks, if that call was made?
Franklin Mathieu
@Snaipe
Mar 04 2016 09:34
mmk_when binds a combination of parameters to a return value, mmk_verify checks whenever a function was called or not
Dominik
@kaidowei
Mar 04 2016 09:53
so when I have a function that calls my mock 10 times, I have to write mmk_verify 10 times?
can't you verify in the stub?
Franklin Mathieu
@Snaipe
Mar 04 2016 10:04
@kaidowei you would do mmk_verify(..., .times = 10)
mmk_verify lets you check the number of times a function has been called based on predicates
Dominik
@kaidowei
Mar 04 2016 12:24
okay, I see. But why do I have to pass the same information again? Cant the mock do that work?
Franklin Mathieu
@Snaipe
Mar 04 2016 12:25
What do you mean by same information?
Are you talking about mmk_when vs mmk_verify?
Dominik
@kaidowei
Mar 04 2016 12:26
yes. mmk_when tells the mock how often and how it will be called;
mmk_verify should only check whether the mock really was called that way
Franklin Mathieu
@Snaipe
Mar 04 2016 12:30
Actually, it's a bit more subtle than that. mmk_when defines the behaviour of the mock regardless of the number of times the stub is called. If you define foo(1) to return 1, then it will always do so.
mmk_verify asserts that at some point the function has been called with matching parameters a certain number of times
Both are complementary but not necessary to each other
If you want to test what happens when a function returns a specific value, you use mmk_when (i.e. you tell a function to do things)
If you want to test how the function has been used (i.e. you ask the function if it has been called the way you want), then you use mmk_verify
You can completely use mmk_verify without mmk_when, and mmk_verify without mmk_when (useful when you don't care about return values)
Franklin Mathieu
@Snaipe
Mar 04 2016 12:36
Er, I meant mmk_when without mmk_verify
Dominik
@kaidowei
Mar 04 2016 12:41
okay, I understand. powerful, but (at first glance) quite confusing
what does mmk_eq do?
Franklin Mathieu
@Snaipe
Mar 04 2016 12:42
mmk_eq ought to dissappear, I've since found a better way to express it
Dominik
@kaidowei
Mar 04 2016 12:42
ah, good
Franklin Mathieu
@Snaipe
Mar 04 2016 12:42
but in theory it's a matcher that fixes a parameter to the specific value
in my new batch of tests, it's simply .with_foo = 42 instead of .with_foo = mmk_eq(type, 42)
there are other matchers though
like mmk_any(type), which produces a dummy value matching any parameter
or mmk_lt(type, val), which produces a dummy value matching any parameter less than val
Dominik
@kaidowei
Mar 04 2016 13:32
cool :)
Franklin Mathieu
@Snaipe
Mar 04 2016 13:50
btw, I'm surveying from a group of programmer friends what syntax they prefer between the two mentionned above, if you'd like to weigh in your syntactic preferences: http://goo.gl/forms/7CEBv3vvxT