ماذا يكون اقصر الطرق لتأكيد أن يتم تطبيق السمة إلى الأسلوب في ج #؟
-
11-07-2019 - |
سؤال
وماذا يكون اقصر الطرق لتأكيد أن يتم تطبيق السمة إلى الأسلوب في ج #؟
وأنا باستخدام nunit 2.5
:)
المحلول
MethodInfo mi = typeof(MyType).GetMethod("methodname");
Assert.IsFalse (Attribute.IsDefined (mi, typeof(MyAttributeClass)));
نصائح أخرى
ولست متأكدا من أسلوب تأكيد أن يستخدم nunit، ولكن يمكنك ببساطة استخدام هذا التعبير المنطقي عن المعلمة التي يتم تمريرها إليه (على افتراض انك قادرة على استخدام LINQ:
methodInfo.GetCustomAttributes(attributeType, true).Any()
إذا تم تطبيق سمة، ثم فإنه سيعود صحيح.
إذا كنت تريد أن تجعل من إصدار عام (وليس استخدام تشير typeof) يمكنك استخدام أسلوب عام للقيام بذلك نيابة عنك:
static bool IsAttributeAppliedToMethodInfo<T>(this MethodInfo methodInfo)
where T : Attribute
{
// If the attribute exists, then return true.
return methodInfo.GetCustomAttributes(typeof(T), true).Any();
}
وبعد ذلك يطلق عليه في أسلوب تأكيد الخاص بك مثل ذلك:
<assert method>(methodInfo.IsAttributeAppliedToMethodInfo<MyAttribute>());
لتفعل ذلك مع تعبير، يمكنك تحديد طريقة الإضافة التالية أولا:
public static MethodInfo
AssertAttributeAppliedToMethod<TExpression, TAttribute>
(this Expression<T> expression) where TAttribute : Attribute
{
// Get the method info in the expression of T.
MethodInfo mi = (expression.Body as MethodCallExpression).Method;
Assert.That(mi, Has.Attribute(typeof(TAttribute)));
}
وبعد ذلك يطلق عليه في التعليمات البرمجية مثل هذا:
(() => Console.WriteLine("Hello nurse")).
AssertAttributeAppliedToMethod<MyAttribute>();
ملحوظة أنه لا يهم ما المعلمات التي تم تمريرها إلى الطريقة هي، كما تسمى الطريقة أبدا، فإنه ببساطة تحتاج التعبير.
وبديل لnunit 2.5:
var methodInfo = typeof(MyType).GetMethod("myMethod");
Assert.That(methodInfo, Has.Attribute(typeof(MyAttribute)));
لا تنتمي إلى StackOverflow