Skip to content

Commit ca2b822

Browse files
committed
Better verify/0 vs verify/1 tests
...by using more than one mock in each test.
1 parent ada67ca commit ca2b822

File tree

2 files changed

+91
-28
lines changed

2 files changed

+91
-28
lines changed

test/mox_test.exs

Lines changed: 90 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -351,16 +351,40 @@ defmodule MoxTest do
351351

352352
verify!()
353353
expect(CalcMock, :add, fn x, y -> x + y end)
354+
expect(SciCalcOnlyMock, :exponent, fn x, y -> x * y end)
354355

355-
message = ~r"expected CalcMock.add/2 to be invoked once but it was invoked 0 times"
356-
assert_raise Mox.VerificationError, message, &verify!/0
356+
assert_raise(Mox.VerificationError, &verify!/0)
357+
try do
358+
verify!()
359+
rescue
360+
error in Mox.VerificationError ->
361+
assert error.message =~ ~r"expected CalcMock.add/2 to be invoked once but it was invoked 0 times"
362+
assert error.message =~ ~r"expected SciCalcOnlyMock.exponent/2 to be invoked once but it was invoked 0 times"
363+
end
357364

358-
assert CalcMock.add(2, 3) == 5
365+
CalcMock.add(2, 3)
366+
assert_raise(Mox.VerificationError, &verify!/0)
367+
try do
368+
verify!()
369+
rescue
370+
error in Mox.VerificationError ->
371+
refute error.message =~ ~r"expected CalcMock.add/2"
372+
assert error.message =~ ~r"expected SciCalcOnlyMock.exponent/2 to be invoked once but it was invoked 0 times"
373+
end
374+
375+
SciCalcOnlyMock.exponent(2, 3)
359376
verify!()
360-
expect(CalcMock, :add, fn x, y -> x + y end)
361377

362-
message = ~r"expected CalcMock.add/2 to be invoked 2 times but it was invoked once"
363-
assert_raise Mox.VerificationError, message, &verify!/0
378+
# Adding another expected call makes verification fail again
379+
expect(CalcMock, :add, fn x, y -> x + y end)
380+
assert_raise(Mox.VerificationError, &verify!/0)
381+
try do
382+
verify!()
383+
rescue
384+
error in Mox.VerificationError ->
385+
assert error.message =~ ~r"expected CalcMock.add/2 to be invoked 2 times but it was invoked once"
386+
refute error.message =~ ~r"expected SciCalcOnlyMock.exponent/2"
387+
end
364388
end
365389

366390
test "verifies when mocks are over-called in the process in private mode" do
@@ -386,22 +410,43 @@ defmodule MoxTest do
386410

387411
verify!()
388412
expect(CalcMock, :add, fn x, y -> x + y end)
413+
expect(SciCalcOnlyMock, :exponent, fn x, y -> x * y end)
389414

390-
message = ~r"expected CalcMock.add/2 to be invoked once but it was invoked 0 times"
391-
assert_raise Mox.VerificationError, message, &verify!/0
415+
assert_raise(Mox.VerificationError, &verify!/0)
416+
try do
417+
verify!()
418+
rescue
419+
error in Mox.VerificationError ->
420+
assert error.message =~ ~r"expected CalcMock.add/2 to be invoked once but it was invoked 0 times"
421+
assert error.message =~ ~r"expected SciCalcOnlyMock.exponent/2 to be invoked once but it was invoked 0 times"
422+
end
392423

393-
task =
394-
Task.async(fn ->
395-
assert CalcMock.add(2, 3) == 5
396-
end)
424+
Task.async(fn -> SciCalcOnlyMock.exponent(2, 4) end)
425+
|> Task.await()
397426

398-
Task.await(task)
427+
assert_raise(Mox.VerificationError, &verify!/0)
428+
try do
429+
verify!()
430+
rescue
431+
error in Mox.VerificationError ->
432+
assert error.message =~ ~r"expected CalcMock.add/2 to be invoked once but it was invoked 0 times"
433+
refute error.message =~ ~r"expected SciCalcOnlyMock.exponent/2"
434+
end
435+
436+
Task.async(fn -> CalcMock.add(5, 6) end)
437+
|> Task.await()
399438

400439
verify!()
401-
expect(CalcMock, :add, fn x, y -> x + y end)
402440

403-
message = ~r"expected CalcMock.add/2 to be invoked 2 times but it was invoked once"
404-
assert_raise Mox.VerificationError, message, &verify!/0
441+
expect(CalcMock, :add, fn x, y -> x + y end)
442+
assert_raise(Mox.VerificationError, &verify!/0)
443+
try do
444+
verify!()
445+
rescue
446+
error in Mox.VerificationError ->
447+
assert error.message =~ ~r"expected CalcMock.add/2 to be invoked 2 times but it was invoked once"
448+
refute error.message =~ ~r"expected SciCalcOnlyMock.exponent/2"
449+
end
405450
end
406451

407452
test "verifies mocks are over-called for the current process in global mode" do
@@ -431,40 +476,57 @@ defmodule MoxTest do
431476
set_mox_private()
432477

433478
verify!(CalcMock)
479+
verify!(SciCalcOnlyMock)
434480
expect(CalcMock, :add, fn x, y -> x + y end)
481+
expect(SciCalcOnlyMock, :exponent, fn x, y -> x * y end)
435482

436483
message = ~r"expected CalcMock.add/2 to be invoked once but it was invoked 0 times"
437-
assert_raise Mox.VerificationError, message, &verify!/0
484+
assert_raise Mox.VerificationError, message, fn -> verify!(CalcMock) end
485+
message = ~r"expected SciCalcOnlyMock.exponent/2 to be invoked once but it was invoked 0 times"
486+
assert_raise Mox.VerificationError, message, fn -> verify!(SciCalcOnlyMock) end
438487

439-
assert CalcMock.add(2, 3) == 5
488+
CalcMock.add(2, 3)
440489
verify!(CalcMock)
441-
expect(CalcMock, :add, fn x, y -> x + y end)
490+
message = ~r"expected SciCalcOnlyMock.exponent/2 to be invoked once but it was invoked 0 times"
491+
assert_raise Mox.VerificationError, message, fn -> verify!(SciCalcOnlyMock) end
442492

493+
SciCalcOnlyMock.exponent(2, 3)
494+
verify!(CalcMock)
495+
verify!(SciCalcOnlyMock)
496+
497+
expect(CalcMock, :add, fn x, y -> x + y end)
443498
message = ~r"expected CalcMock.add/2 to be invoked 2 times but it was invoked once"
444-
assert_raise Mox.VerificationError, message, &verify!/0
499+
assert_raise Mox.VerificationError, message, fn -> verify!(CalcMock) end
500+
verify!(SciCalcOnlyMock)
445501
end
446502

447503
test "verifies all mocks for current process in global mode" do
448504
set_mox_global()
449505

450506
verify!(CalcMock)
507+
verify!(SciCalcOnlyMock)
451508
expect(CalcMock, :add, fn x, y -> x + y end)
509+
expect(SciCalcOnlyMock, :exponent, fn x, y -> x * y end)
452510

453511
message = ~r"expected CalcMock.add/2 to be invoked once but it was invoked 0 times"
454-
assert_raise Mox.VerificationError, message, &verify!/0
455-
456-
task =
457-
Task.async(fn ->
458-
assert CalcMock.add(2, 3) == 5
459-
end)
512+
assert_raise Mox.VerificationError, message, fn -> verify!(CalcMock) end
513+
message = ~r"expected SciCalcOnlyMock.exponent/2 to be invoked once but it was invoked 0 times"
514+
assert_raise Mox.VerificationError, message, fn -> verify!(SciCalcOnlyMock) end
460515

461-
Task.await(task)
516+
Task.async(fn -> CalcMock.add(2, 3) end)
517+
|> Task.await()
518+
verify!(CalcMock)
519+
message = ~r"expected SciCalcOnlyMock.exponent/2 to be invoked once but it was invoked 0 times"
520+
assert_raise Mox.VerificationError, message, fn -> verify!(SciCalcOnlyMock) end
462521

522+
SciCalcOnlyMock.exponent(2, 3)
463523
verify!(CalcMock)
464-
expect(CalcMock, :add, fn x, y -> x + y end)
524+
verify!(SciCalcOnlyMock)
465525

526+
expect(CalcMock, :add, fn x, y -> x + y end)
466527
message = ~r"expected CalcMock.add/2 to be invoked 2 times but it was invoked once"
467528
assert_raise Mox.VerificationError, message, &verify!/0
529+
verify!(SciCalcOnlyMock)
468530
end
469531

470532
test "raises if a non-mock is given" do

test/support/mocks.ex

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
Mox.defmock(CalcMock, for: Calculator)
2+
Mox.defmock(SciCalcOnlyMock, for: ScientificCalculator)
23
Mox.defmock(SciCalcMock, for: [Calculator, ScientificCalculator])
34

45
Mox.defmock(SciCalcMockWithoutOptional,

0 commit comments

Comments
 (0)