This attribute specifies a class as a story fixture.
Carna does not search a class (not a nested class) specified by this attribute as a fixture to be run. It can be searched when the member (property or field) is defined using its type.
The available properties are as follows.
Property | Description |
---|---|
Description | Specifies a description of a fixture. |
Fixtures | Specifies types of fixtures that are contained by a fixture. |
Tag | Specifies a tag to filter a fixture. |
Benefit | Specifies a benefit about a fixture. |
Role | Specifies a role about a fixture. |
Feature | Specifies a feature about a fixture. |
CanRunParallel | Specifies a value that indicates whether child fixtures can be run in parallel. The default value is false. |
IsRootFixture | Specifies a value that indicates whether this fixture is searched as a fixture to be run. The default value is false. |
RequiresSta | Specifies a value that indicates whether to run this fixture in a single thread apartment. The default value is false. |
For example:
[Feature( "Online membership renewal", Benefit = "to reduce lost sales from lapsing memberships", Role = "Flying High sales manager", Feature = "members to be able to renew their membership online" )] class OnlineMembershipRenewal { [Story( "Providing a secure password when registering", Benefit = "to avoid hackers compromising member accounts", Role = "the systems administrator", Feature = "new members to provide a secure password when they register" )] class ProvidingSecurePassword { ... } }
[Feature( "Online membership renewal", Benefit = "to reduce lost sales from lapsing memberships", Role = "Flying High sales manager", Feature = "members to be able to renew their membership online" )] class OnlineMembershipRenewal { [Story] ProvidingSecurePassword Story01 { get; } = default!; } [Story( "Providing a secure password when registering", Benefit = "to avoid hackers compromising member accounts", Role = "the systems administrator", Feature = "new members to provide a secure password when they register" )] class ProvidingSecurePassword { ... }
[Feature( "Online membership renewal", typeof(ProvidingSecurePassword), Benefit = "to reduce lost sales from lapsing memberships", Role = "Flying High sales manager", Feature = "members to be able to renew their membership online" )] class OnlineMembershipRenewal; [Story( "Providing a secure password when registering", Benefit = "to avoid hackers compromising member accounts", Role = "the systems administrator", Feature = "new members to provide a secure password when they register" )] class ProvidingSecurePassword { ... }
[Story( "Account Holder withdraws cash", Benefit = "that I can get money when the bank is closed", Role = "an Account Holder", Feature = "to withdraw cash from an ATM", IsRootFixture = true )] class WithdrawCashStory { ... }