我可以断言 C# 方法具有特定属性吗?

Can I assert that a C# method has a certain attribute?

[DummyAttribute]
public void DummyMethod() {
  return;
}

我想编写一个 Nunit 测试来断言 DummyMethod 装饰有 DummyAttribute,我可以这样做吗?

是的,有反思。一种可能的解决方案:

var dummyAttribute = typeof(YourClassName)
    .GetMethod(nameof(YourClassName.DummyMethod))!
    .GetCustomAttributes(inherit: false)
    .OfType<DummyAttribute>()
    .SingleOrDefault();

Assert.That(dummyAttribute, Is.Not.Null);

这些类型的测试通常有助于定义代码库的功能规范。

@kardo 的代码绝对没问题,似乎也解决了你的问题。

但是,如果有人稍后需要更多描述性单元测试来指定功能规格,那么我建议尝试 fluent assertions

typeof(YourClassName).GetMethod(nameof(YourClassName.DummyMethod)).Should().BeDecoratedWith<DummyAttribute>();

是的,您可以反映或使用“流畅的断言”包。

或者,由于您已经在使用 NUnit...

Assert.That(typeof(YourClassName).GetMethod(nameof(SomeMethod)),
    Has.Attribute(typeof(DummyAttribute)));