public void DepositIntegrationTest()
    {
        ba = new BankAccountNew(new ConsoleLog())
        {
            Balance = 100
        };
        ba.Deposit(100);

        Assert.That(ba.Balance, Is.EqualTo(200));
    }
    public void DepositUnitTestWithStub()
    {
        var log = new NullLogWithResult(true);

        ba = new BankAccountNew(log)
        {
            Balance = 100
        };
        ba.Deposit(100);

        Assert.That(ba.Balance, Is.EqualTo(200));
    }
    public void DepositUnitTestWithDynamicFake()
    {
        // Dynamic fakes are good to instantiate, but they don't act like the class.
        var log = Null <ILog> .Instance;

        ba = new BankAccountNew(log)
        {
            Balance = 100
        };
        ba.Deposit(100);

        Assert.That(ba.Balance, Is.EqualTo(200));
    }
    public void DepositTestWithMock()
    {
        var log = new LogMock(true);

        ba = new BankAccountNew(log)
        {
            Balance = 100
        };
        ba.Deposit(100);

        Assert.Multiple(() =>
        {
            Assert.That(ba.Balance, Is.EqualTo(200));
            Assert.That(log.MethodCalls[nameof(LogMock.Write)], Is.EqualTo(1));
        });
    }