2

RethinkDB の機能をオブジェクトにラップする Model クラスを作成しました。その一部は次のようになります。

class Model(object):
    __metaclass__ = ModelType

    def __init__(self, **kwargs):
        self._fields = kwargs
        self._saved = False

    def save(self):
        if self._saved:
            id = self._fields.pop('id')
            result = r.table(self._tablename)
                      .get(id)
                      .update(self._fields, return_vals=True)
                      .run(self.connection())
        else:
            result = r.table(self._tablename)
                      .insert(self._fields, return_vals=True)
                      .run(self.connection())

        if result['errors'] > 0:
            raise ActionError(result['first_error'])

        self._fields = result['new_val']
        self._saved = True

save()ここで、メソッドが本来の動作をするかどうかをテストしたいと思います。この操作にはデータベース接続を使用しているため、rオブジェクトの正しいメソッドが呼び出されることをテストするだけでよいため、テスト前に接続を作成および削除するのはコストがかかり、役に立ちません。明らかに、モックはこれに対する解決策ですが、何をどのようにオブジェクトをモックするべきかという問題に直面していrます。私は概念をあざけるのが初めてであることを認めます。

では、 をテストする私のメソッドでは、 /が正しい引数で呼び出されたsave()かどうかをどのようにテストできますか? また、それらに戻り値を割り当てるにはどうすればよいでしょうか?update()insert()

4

1 に答える 1

3

したがって、r をモックする必要があります。

r = mock.Mock()
r.table = mock.Mock(return_value=r)
r.insert = mock.Mock(return_value=r)

Model.save()

r.insert.assert_called_with("args", "you're" "expecting")

そこから推定できると思います

于 2014-04-23T11:50:56.873 に答える