【问题标题】:How to test my code如何测试我的代码
【发布时间】:2013-12-07 01:01:37
【问题描述】:

我无法获得我想要的代码输出。我想测试一个类和类中定义的函数。这是我的代码:

class Book:
    # the class constructor
    def __init__(self, author, title, book_id):
        self.title = title
        self.author = author
        self.book_id = book_id      
    def __str__(self):
        s = "Books("+self.author+", "+self.title+", "+self.book_id+")"
        return s
    def __repr__(self):
        return str(self)

我试图测试它是这样的:

 >>> author="Dr. Suess"
>>> title="The Cat in the Hat"
>>> book_id="12345"
>>> Book
<class '__main__.Book'>
>>> 

我得到的输出是最后一行。我可能做错了,但我不知道如何测试它。如果有人能告诉我,那就太好了!

【问题讨论】:

  • 你想要的输出是什么?

标签: python function class testing python-3.3


【解决方案1】:

当您在解释器中输入Book 时,您将获得实际的Book 类的表示作为输出。 __repr____str__ 都引用Book实例,而不是类本身。所以要测试这个,你必须实例化一个Book

>>> b = Book("Dr. Suess", "The Cat in the Hat", "12345")
>>> b
"Books(Dr. Suess, The Cat in the Hat, 12345)"

请记住 - 一个类就像一个实例的蓝图。在这种情况下,Book 定义了 Book 的含义,但它实际上并未定义实际的 Book 对象 - 为此,您需要使用我所做的代码创建一个 Book 实例.

【讨论】:

    【解决方案2】:
    >>> Book
    <class '__main__.Book'>
    

    在控制台中执行上述操作时,它不会调用在instance 上创建的__repr__ 方法。让我解释一下,Book 只是一个类对象,它不是一个实例,因为你没有为它调用任何参数,但是,如果你确实调用参数,这就是你得到的:

    >>> from Books import Book
    >>> Book
    <class Books.Book at 0x027B0AE8>
    >>> Book("Hello", "World", '1234')
    Books(Hello, World, 1234)
    

    如您所见,因为我们创建了一个方法的实例,所以我们能够调用 __repr__

    【讨论】:

      猜你喜欢
      • 2013-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-21
      • 1970-01-01
      相关资源
      最近更新 更多