У меня есть метод с n-параметром.Я хочу украсить этот метод с атрибутом, который содержит значения для этих n-параметров.Я ограничен в том, что я не могу вызвать этот метод, просто предоставив параметры типа function(param1, param2)
, но я могу позволить функции иметь параметр по умолчанию и вызывать его без изменения параметров function()
, с Атрибутом, который я хочу выполнить метод с этими параметрамиset:
[TestCase]
[Parameters(new object[] { 3, 0 })]
[Parameters(new object[] { 1, 1 })]
[Parameters(new object[] { 4, 4 })]
public void TestParameterized(double x = 0, double y = 0)
{
Assert.AreEqual(x, y);
}
Так как мои параметры не всегда удваиваются, я передаю объект Array и применяю его соответственно.
[Serializable, AttributeUsage(AttributeTargets.Method, AllowMultiple = true, Inherited = false)]
public class TestCaseAttribute : OnMethodBoundaryAspect
{
public TestCaseAttribute()
{
}
public override void OnEntry(MethodExecutionArgs args)
{
foreach (object attribute in args.Method.GetCustomAttributes(false))
{
if (attribute.GetType() == typeof(ParametersAttribute))
{
for (int i = 0; i < args.Arguments.Count; i++)
{
args.Arguments.SetArgument(i, Convert.ToDouble(((ParametersAttribute)attribute).Params[i]));
}
base.OnEntry(args);
}
}
}
}
(Атрибут параметра просто содержит заданные параметры)
Здесь я перебираю все имеющиеся у меня параметры, что работает, и приводю их (для целей тестирования) к удвоению,Затем я хотел бы «вызывать» метод так часто, как предоставляется атрибут.
Как написано, метод выполняется, к сожалению, только один раз.
Может кто-нибудь помочь мне с этой проблемой?Спасибо!