public void HiddenMethodsAndHidingMethodsShouldHaveTheirBehaviourCorrectlyVerified_WhenBehaviourIsNotAsExpected()
        {
            var repo = new HidingDerivedMultipliesByX()
            {
                X = 3, Y = 1
            };
            var proxy = Mimic.Record <IHidingDerivedTriples>(repo);

            var answer1 = proxy.Function(3);
            var answer2 = ((IHiddenBaseMultipliesByY)proxy).Function(3);

            var history = Mimic.GetHistory(proxy);


            var repoBehavesAsExpected = new HidingDerivedMultipliesByX()
            {
                X = 2, Y = 1
            };
            var verifier = Mimic.GetBehaviourVerifier(history);
            var result   = verifier.ConfirmBehaviourHasNotChanged(repoBehavesAsExpected);

            Assert.IsFalse(result);

            var repoBehavesAsExpected2 = new HidingDerivedMultipliesByX()
            {
                X = 3, Y = 2
            };
            var verifier2 = Mimic.GetBehaviourVerifier(history);
            var result2   = verifier.ConfirmBehaviourHasNotChanged(repoBehavesAsExpected2);

            Assert.IsFalse(result2);
        }
        public void HiddenMethodsAndHidingMethodsShouldBeCorrectlyDistinguished()
        {
            var repo = new HidingDerivedMultipliesByX()
            {
                X = 3, Y = 1
            };
            var proxy = Mimic.Record <IHidingDerivedTriples>(repo);

            var answer1 = proxy.Function(3);
            var answer2 = ((IHiddenBaseMultipliesByY)proxy).Function(3);

            var history = Mimic.GetHistory(proxy);

            var replayer = Mimic.Stub <IHidingDerivedTriples>(history);

            Assert.AreEqual(answer1, replayer.Function(3));
            Assert.AreEqual(answer2, ((IHiddenBaseMultipliesByY)replayer).Function(3));
        }