1

ユニットテストは開発中に重要です。ただし、一部のコードをテストするのは簡単ではありません。

そのようなコードがある場合:

class Filesystem():

    def destroy(self, fs):
        os.system("mkfs.ext4 %s" % fs)
        #assert(self.size(fs) == 0)

テストのためにファイルシステムを破壊できません。

この状況では、テスト用に UNIX 上にファイル ベースのドライブを作成できます。

ただし、API クラスの場合:

class Blog():

    def post(self, text):
        blog.library.post(self.access_key, text)

テストのためにブログ記事を投稿したくありません。

私は何をすべきか?

4

4 に答える 4

4

単体テストの場合:

クラスは直接対話するべきではありませんが、クラスの依存関係blog.libraryとして注入している中間層を介して対話する必要があります。Blogテストでは、モックを作成し、期待されるメソッドが期待されるパラメーターで呼び出されたことをアサートします。

機能/統合テストの場合:

ダミーのブログ エンジンを設定し、実際の投稿を実行します。次に、リクエストのあるページに投稿が実際に表示されることを確認しますhttp

于 2013-06-21T04:40:46.773 に答える
3

専門家ではありませんが、あざけることが答えだと思います。

記事を投稿したくありません。実際、テスト コードは実際の記事を想定していません。オブジェクトを偽造し (これをモックと呼んでいます) 、実際の記事のように動作させるだけで済みます。実際のコードで作業が完了するようにするには、それで十分です。

テストの目的は、コードが正しく動作することを確認することです。OO プログラミングでは、すべてをオブジェクトとして扱ったので、記事を投稿すると、現実世界で実際の記事を表すオブジェクトが実際に作成されます。コードの動作を表現するには、偽のオブジェクトをモックするだけで十分なので、実際の記事を書く必要はまったくありません。コードがオブジェクトを作成することを証明するだけで十分です。

于 2013-06-21T04:42:07.920 に答える
1

他の人が言ったように、ここでは嘲笑があなたの助けになります。利用可能なモッキング フレームワークは多数あります。私は Mockito を好みます。

この記事は基本を非常に迅速かつ明確にカバーしていると思います

Mockito は静的メソッドをモックできませんが、これを実現するために PowerMock と組み合わせて使用​​できます。これを行う方法については、一般的にWeb上(特にSO)に多くの例があります。そうは言っても、PowerMock に頼らなければならないということは、通常、私のコードに何か臭いがあることを示していると常に感じています。

編集

私がJavaの観点から話していることに気付きましたが、それはあなたの現在の環境ではないようです

編集終了

于 2013-06-21T04:49:32.703 に答える
1

アルバートが言ったように、そうあるべきですmock up entity

.NET では、テストしたいこれらのメソッドを作成してvirtual、実際のエンティティを拡張できるようBlogにしMockedBlogます。これMockedBlogは、overrideメソッドを持つようにPost()なり、Mm テストがこのメソッドに到達することを次のように確認します。

public class MockedBlog : Blog
{
    public void override Post(string text)
    {  PostMethodWasCalled = true; }

    public bool PostMethodWasCalled {get;set;}
}

テストでは、私はこのようなことをします

var mockup = new MockedBlog();
// do the preparation, then post
mockup.Post("hello world");
Assert.IsTrue(mockup.PostMethodWasCalled);
于 2013-06-21T04:50:36.223 に答える