如何使用属性将方法作为表达式传入
本文关键字:表达式 方法 何使用 属性 | 更新日期: 2023-09-27 18:33:55
我想通过属性来装饰测试方法。此属性应知道就属性化方法而言,哪个测试被认为是先前的。下面是一个示例:
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)]
它不会编译:(
不幸的是,你不能这样做,属性参数必须是编译时常量。
我想唯一的选择是在当前测试执行之前实际调用以前的测试(该测试的第一行)。