首页 > 解决方案 > 单元测试不通过,为什么?

问题描述

我是 C# 初学者,我有一个包含以下说明的作业。我已经为他们提供了我创建的类的代码,这样你就可以有一些上下文,看看我是否做的一切都是正确的

https://imgur.com/a/Ce04tyK

我一直在尝试创建两个对象并将它们与单元测试中的 Assert.AreEqual 方法进行比较。但是,它一直在失败。这是我写的:

[TestClass]
public class UnitTest1
{
    [TestMethod]
    public void EmptyAccount()
    {
        //given 
        Person person = new Person("John", "Smith");
        BankAccount account = new BankAccount(person, 0.00);

        //when
        Person person2 = new Person("Michael", "Johnson");
        BankAccount account2 = new BankAccount(person2, 0.00);

        //then
        Assert.AreEqual(account, account2);
    }

class Program
{

    static void Main(string[] args)
    {                       
    }
}

public class Person
{       
    public string FirstName { get; set; }

    public string LastName { get; set; }

    public Person(string firstName, string lastName)
    {
        FirstName = firstName;
        LastName = lastName;
    }

    public override string ToString()
    {
        return FirstName+LastName;
    }
}

public class BankAccount
{      
    public Person Owner
    { get; private set; }

    public static double Balance
    { get; private set; }

    public static double InterestRate
    { get; private set; }

    public BankAccount (Person person, double balance)
    {
        Balance = balance;
        Owner = person; 
    }

    public static void Deposit(double deposit)
    {
        Balance += deposit;
    }

    public static void Withdrawal(double withdrawal)
    {
        Balance -= withdrawal;
    }

    public static void DepositInterest(double interestRate)
    {
        interestRate = InterestRate;
        Balance += (Balance * InterestRate);
    }

    public override string ToString()
    {
        return string.Format("Your name is {0} and your balance is {1}", Owner, Balance);
    }
}

我做错了什么,我该如何解决?如果这是一个愚蠢的问题,我很抱歉,但就像我说的那样,我是编程新手。

标签: c#unit-testing

解决方案


@BradleyDotNet的解释是关于为什么AreEqual返回false然后你的测试失败的完整解释。但我想说你能做些什么来解决你的问题。

在您的情况下,所有者BackAcounts不同,您进入方法是正常的falseAreEqual并且您的测试失败

为了在第一步编写单元测试,您必须决定应该测试哪个单元,并且您必须在脑海中定义一个场景。

例如,当账户所有者想要提现时,您必须检查一些条件(e.g. Account is Empty or not)

使用您在具有名称的方法中检查这些条件,CanWithdraw 然后检查帐户是否为空 return false

为了测试这些场景,你可以编写这个测试:

...
[TestMethod]
public void CanWithdraw_AccountIsEmpty_ReturnsFalse()
{
    var person = new Person("John", "Smith");
    var account = new BankAccount(person, 0.00);
    var result = account.CanWithdraw();

    Assert.IsFalse(result);
}

我希望这个答案对你有所帮助。


推荐阅读