我正試圖掌握 Python,但在嘗試使用資料類時似乎遇到了瓶頸。但是當我運行測驗時,我得到了斷言錯誤,因為它似乎沒有看到正確的資料類。
我有以下代碼:
檔案:音樂庫.py
from dataclasses import dataclass
@dataclass
class Track:
title: str
artist: str
file: str
class MusicLibrary:
def __init__(self):
self.track = Track
def all(self):
return self.track
def add(self, title, artist, file):
self.track(title = title, artist = artist, file = file)
add 函式是從測驗中呼叫的,并傳遞了三個引數:
import unittest
from player.music_library import MusicLibrary
class TestMusicLibrary(unittest.TestCase):
ml = MusicLibrary()
def test_all(self):
ml = MusicLibrary()
ml.add("Track1", "artist1","file1")
self.assertEqual(ml.all(), ["Track1","artist1","file1" ])
然而測驗失敗了
Traceback (most recent call last):
File "/projects/python/python-music-player-challenges/seed/tests/test_music_library.py", line 13, in test_all
self.assertEqual(ml.all(), ["Track1","artist1","file1" ])
AssertionError: <class 'player.music_library.Track'> != ['Track1', 'artist1', 'file1']
這里發生了什么?我顯然遺漏了一些明顯的東西。
謝謝
uj5u.com熱心網友回復:
像這樣更新 music_library.py:
from dataclasses import dataclass
@dataclass
class Track:
title: str
artist: str
file: str
class MusicLibrary:
def __init__(self):
self.track = None
def all(self):
return self.track
def add(self, title, artist, file):
self.track = Track(title=title, artist=artist, file=file)
注意上面代碼中Dataclass的實體化。
并像這樣更新您的測驗用例:
import unittest
from music_library import MusicLibrary
class TestMusicLibrary(unittest.TestCase):
def test_all(self):
ml = MusicLibrary()
ml.add("Track1", "artist1", "file1")
self.assertEqual([ml.all().title, ml.all().artist, ml.all().file],
["Track1", "artist1", "file1"])
在您的測驗代碼中,您正在比較不同的物件型別,您應該ml.all()首先將輸出轉換為串列。
如果你運行測驗,你會得到以下輸出:
Ran 1 test in 0.000s
OK
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/534302.html
標籤:Pythonpython-3.x单元测试python-数据类
