public void Its_EquivalentTo_ThrowsAssertionExcpetion()
        {
            // Given
            var booMock          = new Mock <IBar>();
            var foo              = new Foo(booMock.Object);
            var expectedBarParam = new BarParam {
                Description = "expected description", ReferenceNumber = 12345
            };
            var barParam = new BarParam {
                Description = "actual description", ReferenceNumber = 54321
            };

            foo.CallBoo(barParam);

            // When
            var testException = Assert.Throws <XunitException>(() =>
                                                               booMock.Verify(b => b.ItWorked(Its.EquivalentTo(expectedBarParam)))
                                                               );

            // Then
            var expectedStartOfException =
                $"Expected member {nameof(expectedBarParam.Description)} to be {Environment.NewLine}\"{expectedBarParam.Description}\" with a length of {expectedBarParam.Description.Length}, "
                + $"but {Environment.NewLine}\"{barParam.Description}\" has a length of {barParam.Description.Length}."
                + $"{Environment.NewLine}Expected member {nameof(expectedBarParam.ReferenceNumber)} to be {expectedBarParam.ReferenceNumber}, "
                + $"but found {barParam.ReferenceNumber}.";

            Assert.StartsWith(expectedStartOfException, testException.Message);
        }
        public void It_IsEquivilentToMatcher_VerifySuccess()
        {
            // Given
            var booMock  = new Mock <IBar>();
            var foo      = new Foo(booMock.Object);
            var fooParam = new FooParam {
                Description = "test description", ReferenceNumber = 12345
            };
            var expectedBarParam = new BarParam {
                Description = fooParam.Description + "", ReferenceNumber = fooParam.ReferenceNumber
            };

            foo.CallBoo(fooParam);

            // When
            booMock.Verify(b => b.ItWorked(It <BarParam> .IsEquivalentTo(expectedBarParam)));

            // Then
            // No Exception thrown
        }
        public void Its_EquivalentTo_DoesNotThrowException()
        {
            // Given
            var booMock  = new Mock <IBar>();
            var foo      = new Foo(booMock.Object);
            var fooParam = new FooParam {
                Description = "test description", ReferenceNumber = 12345
            };
            var expectedBarParam = new BarParam {
                Description = fooParam.Description, ReferenceNumber = fooParam.ReferenceNumber
            };

            foo.CallBoo(fooParam);

            // When
            booMock.Verify(b => b.ItWorked(Its.EquivalentTo(expectedBarParam)));

            // Then
            // No Exception thrown
        }
        public void It_IsEquivilentToMatcher_VerifyFail()
        {
            // Given
            var booMock  = new Mock <IBar>();
            var foo      = new Foo(booMock.Object);
            var fooParam = new FooParam {
                Description = "test description", ReferenceNumber = 12345
            };
            var expectedBarParam = new BarParam {
                Description = "something else", ReferenceNumber = 54321
            };

            foo.CallBoo(fooParam);

            // When, Then
            var testException = Assert.Throws <MockException>(() =>
                                                              booMock.Verify(b => b.ItWorked(It <BarParam> .IsEquivalentTo(expectedBarParam)), Times.Once)
                                                              );

            Assert.StartsWith("Expected invocation on the mock once, but was 0 times", testException.Message.Trim());
        }
        public void Its_EquivalentTo_ThrowsException_WithMultipleSetups()
        {
            // Given
            var booMock  = new Mock <IBar>();
            var foo      = new Foo(booMock.Object);
            var fooParam = new FooParam {
                Description = "given value 1", ReferenceNumber = 12345
            };
            var fooParam2 = new FooParam {
                Description = "given value 2", ReferenceNumber = 23456
            };
            var expectedBarParam = new BarParam {
                Description = fooParam.Description, ReferenceNumber = fooParam.ReferenceNumber
            };
            var expectedBarParam2 = new BarParam {
                Description = fooParam2.Description, ReferenceNumber = fooParam2.ReferenceNumber
            };
            var unExpectedBarParam = new BarParam {
                Description = "Unexpected value"
            };

            booMock.Setup(b => b.ItWorked(Its.EquivalentTo(expectedBarParam, true)));
            booMock.Setup(b => b.ItWorked(Its.EquivalentTo(expectedBarParam2, true)));
            foo.CallBoo(fooParam);
            foo.CallBoo(fooParam2);

            // When
            booMock.Verify(b => b.ItWorked(Its.EquivalentTo(expectedBarParam, true)), Times.Once);
            booMock.Verify(b => b.ItWorked(Its.EquivalentTo(expectedBarParam2, true)), Times.Once);

            // and When Then
            var testException = Assert.Throws <MockException>(() =>
                                                              booMock.Verify(b => b.ItWorked(Its.EquivalentTo(unExpectedBarParam, true)), Times.Once)
                                                              );

            Assert.StartsWith("Expected invocation on the mock once, but was 0 times", testException.Message.Trim());
        }
 public void CallBoo(BarParam param)
 {
     _bar.ItWorked(new BarParam {
         Description = param.Description, ReferenceNumber = param.ReferenceNumber
     });
 }