2

テストメソッドを属性で飾りたい。この属性は、属性付きメソッドに関してどのテストが以前と見なされるかを認識している必要があります。次に例を示します。

    private void DestinationChoiceViewLoaded_AllTpmFeaturesAreEnabled_UIElementsAreSetUpProperly() {
        var vut = new DestinationChoiceViewUIWrapper();

        UIControlAssert.Clickable(vut.GetNextPageButton());
        UIControlAssert.Clickable(vut.GetPreviousPageButton());
    }

    [PreviousTestInOrder()]
    public void Run_DestinationChoiceView_Tests() {

        var vut = new DestinationChoiceViewUIWrapper();

        UIControlAssert.Clickable(vut.GetNextPageButton());
        UIControlAssert.Clickable(vut.GetPreviousPageButton());
    }   

どういうわけか、DestinationChoiceViewLoaded_AllTpmFeaturesAreEnabled_UIElementsAreSetUpProperly を属性コンストラクターに渡したいと思います。

私は試した:

 [AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = false)]
public class PreviousTestInOrderAttribute : Attribute
{
    public string MethodName { get; private set; }

    public PreviousTestInOrderAttribute(Expression<Action> memberExpression) {
        MethodName = GetMemberName(memberExpression);
    }

    public static string GetMemberName(Expression<Action> memberExpression) {
        MemberExpression expressionBody = (MemberExpression) memberExpression.Body;
        return expressionBody.Member.Name;
    }
}

でももしそうなら

[PreviousTestInOrder(() => DestinationChoiceViewLoaded_AllTpmFeaturesAreEnabled_UIElementsAreSetUpProperly)]

コンパイルされません:(

4

1 に答える 1

3

残念ながら、それはできません。属性パラメーターはコンパイル時の定数でなければなりません。

唯一の代替手段は、現在のテストが実行される前に、その前のテストを実際に呼び出すことだと思います (そのテストの最初の行)。

于 2013-10-03T08:55:08.810 に答える