-
Notifications
You must be signed in to change notification settings - Fork 60
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
HaveAnyAttributes seams to check that all exist is that how it should work? #257
Comments
Hi @jnormen, thank you for your question. To me the method
You can also check the following simple Xunit example. The first test passes since the classes all have at least one of the attributes [Fact]
public void HaveAnyAttributesPassingTest()
{
var classesWithAtLeastOneAttribute = Classes()
.That()
.Are(typeof(ClassWithAttribute1), typeof(ClassWithAttribute2), typeof(ClassWithBothAttributes))
.Should()
.HaveAnyAttributes(typeof(Test1), typeof(Test2), typeof(Test3));
classesWithAtLeastOneAttribute.Check(Architecture);
}
[Fact]
public void HaveAnyAttributesFailingTest()
{
var classesWithoutOneOfTheAttributes = Classes()
.That()
.Are(typeof(ClassWithoutAttributes), typeof(ClassWithDifferentAttribute))
.Should()
.HaveAnyAttributes(typeof(Test1), typeof(Test2), typeof(Test3));
classesWithoutOneOfTheAttributes.Check(Architecture);
}
[Test1]
internal class ClassWithAttribute1 { }
[Test2]
[Test4]
internal class ClassWithAttribute2 { }
[Test1]
[Test2]
internal class ClassWithBothAttributes { }
internal class ClassWithoutAttributes { }
[Test4]
internal class ClassWithDifferentAttribute{ }
internal class Test1 : Attribute { }
internal class Test2 : Attribute { }
internal class Test3 : Attribute { }
internal class Test4 : Attribute { } If you still observe unexpected behavior with the method feel free to add a minimal example to your question. |
GetAttribute is a Refit Atribute. When I do like this the test expect there shall be an Interface using this attribute. So if I do: And I have a GetAttribut no Post it complains there is no Post. And if I have a Post but no Get it says the opposite. for example:
ArchUnitNET.Domain.Exceptions.TypeDoesNotExistInArchitecture: Type Refit.GetAttribute does not exist in provided architecture or is no attribute. When I wrote the issue I did not check the source code, and now when I answer I haven't checked the source code either, but I see that I use Interface() not classes and are not sure if the implementation is different. I'm on the move now so just wanted to add a fast example as is. I did not use the .Are(typeof(ClassWithAttribute1), typeof(ClassWithAttribute2), typeof(ClassWithBothAttributes)) |
Hi @jnormen, could you quickly share with us how you load your classes? Are you sure that the Refit Attributes are correctly loaded and part of the analysed architecture? |
I use Refit. You put attributes on them like this:
then I do like this:
This works, but I want to do like this: In this case it force me to have all set. Any for me is like, if any of them exist, then it should act. I want to use it as a generic verification. Not all clients will have all those attributes set. So what I want to do is: If any of those attributes exist then it shall act and check that the name end with Client. If that's not how any works, then the naming is strange and the bug it more typo :) |
Hi @jnormen, since the attributes from Refit are added to the methods of the interface, this has to be taken into account when writing the test. So this test would check, that any methods with any of these attributes are defined in interfaces ending with
|
I don't understand how you get this to work... I still get the same error. ArchUnitNET.Domain.Exceptions.TypeDoesNotExistInArchitecture: Type Refit.PostAttribute does not exist in provided architecture or is no attribute. If I add a Post method in refit interface it complains that a Put does not exist. ANY for me is if there is a get then act, if there is a post, then act, if there is a delete than act. For exmaple: I have a Refit Interface with a get set when I run this code:
|
Since we do not have a full example it is hard to reproduce your exact issue on our side. Could you please run the attached sample project, for me this neither throws any exception nor does the test fail. |
When I do:
HaveAnyAttributes(....)
It always require me to have the first attribute set. but when I also add a list of other attributes it force me to have them as well.
.HaveAnyAttributes(typeof(GetAttribute), typeof(PostAttribute), typeof(PutAttribute), typeof(DeleteAttribute))
The text was updated successfully, but these errors were encountered: