BenMorris / NetArchTest

A fluent API for .Net that can enforce architectural rules in unit tests.
MIT License
1.34k stars 81 forks source link

Get all method members calls? #136

Open kristofferjalen opened 8 months ago

kristofferjalen commented 8 months ago

I'm trying to write a test asserting that no (non-test) code is used only for unit tests, just like this guy: https://stackoverflow.com/questions/73166287/check-entire-net-solution-to-verify-code-is-not-only-used-for-test

I can't find out how to get the calling types for a method. In ArchUnitTest there seems to be this:

MethodMembers()
   .That().AreCalledBy(Types().That().ResideInNamespace(".*(?i)Test.*", true) )
   .Should().CallAny(MethodMembers().That().AreDeclaredIn(Types().That()
              .ResideInNamespace("^MyTypes.*", true)
              .And().DoNotResideInNamespace(".*(?i)Test.*", true)))
NeVeSpl commented 8 months ago

NetArchTest does not have the equivalent of AreCalledBy, and it always operates on a type level.

In NetArchTest.eNhancedEdition there is AreUsedByAny, thus it is possible to write smth like this:

var result = Types.InAssembly(typeof(AppTests).Assembly, loadReferencedAssemblies: true)
         .That()
         .AreUsedByAny("AppTests")
         .And()
         .DoNotResideInNamespace("AppTests")
         .Should()
         .BeUsedByAny("App")
         .GetResult();