0

私のAuthenticationクラスには、コントローラーによって呼び出される次のメソッドがあります。コントローラーがそれ自体を呼び出すことができることは知っていますがSetAuthCookie、追加の抽象化を希望します。

public void FormsAuthSignIn(string loginName, bool rememberMe = false)
{
    FormsAuthentication.SetAuthCookie(loginName, rememberMe);
}

FormsAuthenticationオブジェクト ブラウザを見るだけで、これが機能しているかどうかを確認するために使用できるメンバーが表示されませんか? 属性を使用してテスト コントローラーを作成し、テストAuthorize内でメソッドを呼び出す必要がありますか? ここで何をすべきですか?

4

2 に答える 2

1

ここで単体テストSetAuthCookieする必要があるのは、正しいパラメーターで呼び出されたものだけだと思います。FormsAuthenticationのロジック をテストする必要はありません。

これはFormsAuthentication、インターフェイスの背後に隠れて、メソッドの呼び出しをカウントするテスト専用の独自のスタブを実装することで実現できます。
Moles / Typemock Isolator などを使用すると、SetAuthCookie直接モックすることができますが、任意のモッキング フレームワークがこのタスクに役立ちます。

それを超えて、私見、この場合:

public class MyClass
{
    public int Foo()
    {
        return Bar();
    }

    private int Bar()
    {
        return BarInner();
    }

    private int BarInner()
    {
        return BarInnerer();
    }

    private int BarInnerer()
    {
        return 42;
    }
}

のみFooテストする必要があります。他のすべてのメソッドは実装の詳細です。
この場合と同じ - の呼び出し元に対して、が適切なケースで呼び出されるFormsAuthSignInことをアサートするテストが必要です。FormsAuthSignIn

于 2012-07-02T15:49:31.450 に答える
0

@seldaryの答えに同意します。静的メソッドへの呼び出しをテストする一般的な方法は、独自のクラスでその呼び出しを抽象化し、それへのインターフェースを持つことです。

しかし、本番コードを変更したくない場合は、別の方法 (おそらく「純粋」ではない) があります。一部のモッキング フレームワークでは、ハックを使用して、静的メソッドの呼び出しをモックできるようにすることで、この状況を回避します。

たとえば、PowerMock を見てください: http://code.google.com/p/powermock/

これはそれを使用するためのチュートリアルです: http://www.michaelminella.com/testing/how-to-mock-static-methods.html

(PS: Powermock はクラスローダで遊んでおり、特にロンドンのモックイストの学校では、モックの良い使い方とは見なされていないため、「あまり純粋ではない」と言いました)

于 2012-07-03T08:42:00.723 に答える