このアプリケーションはkivyさんが作成したものです。 pytestを使って関数をテストしたいのですが、その関数をテストするためにはオブジェクトを最初に初期化する必要がありますが、初期化時にUIのオブジェクトが必要ですが、テスト段階です。 UIから何かを取得する。kivyが作成したアプリケーションをテストするときにUIとやりとりする方法は?
これは、エラーがあり、これは前者のクラスによって使用されるServerMsgオブジェクトを生成するヘルパークラスである
class SaltConfig(GridLayout):
def check_phone_number_on_first_contact(self, button):
s = self.instanciate_ServerMsg(tt)
try:
s.send()
except HTTPError as err:
print("[HTTPError] : " + str(err.code))
return
# some code when running without error
def instanciate_ServerMsg():
return ServerMsg()
を処理されたクラスです。
class ServerMsg(OrderedDict):
def send(self,answerCallback=None):
#send something to server via urllib.urlopen
これは私のテストコードです:それはUIからいくつかの値を必要とするためinitialzingとき
class TestSaltConfig:
def test_check_phone_number_on_first_contact(self):
myError = HTTPError(url="http://127.0.0.1", code=500,
msg="HTTP Error Occurs", hdrs="donotknow", fp=None)
mockServerMsg = mock.Mock(spec=ServerMsg)
mockServerMsg.send.side_effect = myError
sc = SaltConfig(ds_config_file_missing.data_store)
def mockreturn():
return mockServerMsg
monkeypatch.setattr(sc, 'instanciate_ServerMsg', mockreturn)
sc.check_phone_number_on_first_contact()
私はオブジェクトを初期化することはできません、それははAttributeErrorがスローされます。
だから私は立ち往生します。
オブジェクトをモックして元の関数にパッチを適用しようとしましたが、関数自体にUIに関連するロジックがあるため機能しません。
どうすれば解決できますか?ありがとう
デザイン上の瑕疵のようです。ロジックはUIに依存すべきではありません。その理由の1つは、それを孤立してテストできることです。 –