Skip to content
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

Feature: A class/method attribute to allow for better naming #180

Open
BennieCopeland opened this issue Mar 29, 2017 · 7 comments
Open

Feature: A class/method attribute to allow for better naming #180

BennieCopeland opened this issue Mar 29, 2017 · 7 comments

Comments

@BennieCopeland
Copy link
Contributor

BennieCopeland commented Mar 29, 2017

For the most part using void my_super_cool_context_method() works, but there are a few times where I would like to be able to use a real string to describe the context. An example would be:

[Name("describe SomeGenericClass{T}", "focus")]
class describe_SomeGenericClass
{
    [Name("describe SomeMethod(int)")]
    void describe_SomeMethod1()
    { }

    [Name("describe SomeMethod(int, int) overload")]
    void describe_SomeMethod2()
    { }
}
@BrainCrumbz
Copy link
Collaborator

The whole idea behing NSpec, for what we got, is low-to-zero ceremony. Going without attributes I guess came as a consequence of that.

I understand that this attribute would be opt-in, only if you want some not-allowed characters in your test case/context names. Still, I would go with some more descriptive naming: to keep with example, something like:

class describe_SomeGenericClass
{
    void when_SomeMethod_gets_a_number()
    { }

    void when_SomeMethod_gets_two_numbers()
    { }
}

Or, changing also structure:

class describe_SomeGenericClass
{
    void when_calling_SomeMethod
    {
        context["and passing one number"] = () =>
        {
        };

        context["and passing two numbers"] = () =>
        {
        };
    }
}

That goes well with the BDD/RSpec roots of this project, and makes up for a nice output with its contexts and test cases. But of course that might very well be my personal taste. Let's see if @amirrajan has any better suggestion or what else.

Final note: not sure what that "focus" attribute parameter is there for.

@BennieCopeland
Copy link
Contributor Author

Lol, "focus" is another one of your undocumented features. If you add a [Tag("focus")] or a context["...", "focus"], it["...", "focus"], NSpec will only run those subset of tests. I find it useful when I'm driving out a design with tests. I was showing that [Name("...", "focus")] could also possibly support tags, but thinking about it now, you can just add the [Tag()] attribute as well.

@amirrajan
Copy link
Collaborator

amirrajan commented Mar 30, 2017

focus and Tag are definitely "advanced" features. I'm all for support advanced features that help "perfect" a test case (either in helping author tests or read them).

@GiuseppePiscopo
Copy link
Collaborator

@BennieCopeland 😸 right-click, Run Selected Tests is my "focus". Jokes apart, I knew about focus, you see it around in other test frameworks as well. I just didn't get suggested usage there. Thanks for clarifying!

@amirrajan what about a new [Name()] attribute like the one suggested here?

@amirrajan
Copy link
Collaborator

What about a new [Name()] attribute like the one suggested here?

It should be fairly straight forward to implement if @BennieCopeland wants to give it a shot. Bennie, I'd be happy to provide the touch points, video/pairing sessions, anything you need to build this feature (short of doing it myself). I think it would be a great addition. Let me know if you're interested!

@BennieCopeland
Copy link
Contributor Author

BennieCopeland commented Apr 1, 2017 via email

@BrainCrumbz
Copy link
Collaborator

Best wishes for a speedy recovery!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants