【问题标题】:C# Unit Test - Test return methodC#单元测试 - 测试返回方法
【发布时间】:2014-11-08 02:46:24
【问题描述】:

试图对单元测试有一个基本的了解。我创建了一个模型类,其中包含一个返回“Person”对象的方法。现在我想测试这个方法“GetPerson”是否真的返回了一个 Person 对象(P1)。

按照“Arrange, Act, Assert iv'e intanciated Person 类的模式。我只是不知道如何从这里开始。希望得到一些帮助。

人物类:

public class Person
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }

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

    Person p1 = new Person(1, "John", "Dhoe");

    public Person GetPerson()
    {
        return p1;
    }

}

测试类:

 [TestClass]
    public class UnitTest1
    {
        [TestMethod]
        public void GetPersonTest()
        {
            //Arrange
            Person p = new Person(1, "John", "Dhoe");


            //Act



            //Assert


        }
    }

【问题讨论】:

  • 您不需要对此进行测试。编译器确保它确实是一个Person。
  • 我很确定您甚至无法运行此代码。这不会导致StackoverflowException吗?
  • @SriramSakthivel OP 的 GetPerson 方法可能是静态方法。它似乎更适合那个。
  • @BartoszKP 那么您可能正在使用其他东西,而不是 OP 的确切代码。
  • @ssg 正如你猜想的那样。致 OP:发布真实代码(至少是等效的)可能会更好。发布的代码,Person 类是无用的,这意味着你不能创建它的实例。

标签: c# asp.net asp.net-mvc unit-testing tdd


【解决方案1】:

您可以通过以下方式测试对象是否成功创建:

var myPerson = new Person;
Assert.IsInstanceOf(myPerson, typeof(Person));

这始终是测试类的第一个很好的单元测试。

【讨论】:

    【解决方案2】:

    这段代码真的很奇怪(并且会崩溃),但是要准确地填写这个案例的测试:

    [TestClass]
    public class UnitTest1
    {
        [TestMethod]
        public void GetPersonTest()
        {
            //Arrange
            Person p = new Person(0, "", "");      //note the change
    
            //Act
            Person result = p.GetPerson();
    
            //Assert
            Assert.AreEqual(1, result.Id);
            Assert.AreEqual("John", result.FirstName);
            Assert.AreEqual("Dhoe", result.LastName);
        }
    }
    

    这没有意义,因为GetPerson 方法将始终返回同一个人,而不管您传递给构造函数的内容是什么。

    另外,正如Sriram Sakthivel 所指出的,这段代码无论如何都会导致StackoverflowException :)

    这仍然是对您当前实现的 GetPerson 方法的测试。

    【讨论】:

    • 我现在在代码中看到了自己的错误。谢谢,我理解你的意思,并会尝试一个更好的例子。
    • @KristofferAndersson 考虑将您提炼的问题作为不同的帖子发布并关闭/删除该帖子,以避免读者混淆。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-27
    相关资源
    最近更新 更多