# Rider File Template / Code style 這邊是我自己在使用的 File Template & Code Style,給有需要的人參考,相關說明後續會持續補上。 ## File Template ### MS Test ```csharp= $HEADER$namespace $NAMESPACE$ { [Microsoft.VisualStudio.TestTools.UnitTesting.TestClassAttribute] public class $CLASS$Tests { [Microsoft.VisualStudio.TestTools.UnitTesting.TestInitializeAttribute] public void TestInitialize() { } [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute] [Microsoft.VisualStudio.TestTools.UnitTesting.OwnerAttribute("$User_Name$")] [Microsoft.VisualStudio.TestTools.UnitTesting.TestCategoryAttribute("$CLASS$")] [Microsoft.VisualStudio.TestTools.UnitTesting.TestPropertyAttribute("$CLASS$", "$TESTNAME$")] public async System.Threading.Tasks.Task $TESTNAME$(){$END$} } } ``` ### varable User_Name = not editable, macro "Short name of the current user" TESTNAME = editable at "M-01", macro "No macro selected" ## Live Template ### C# #### create test method **rider 原生的 live templates 已經有此功能,但是資訊較少,調用字是 `test` ,且會依據不同的測試框架長出不同的 attribute** **變數 Owner 需要自己選擇巨集 `Full user name of the current user`** - for ms test ```csharp= [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute] [Microsoft.VisualStudio.TestTools.UnitTesting.OwnerAttribute("$Owner$")] [Microsoft.VisualStudio.TestTools.UnitTesting.TestCategoryAttribute("$TestedClassName$")] [Microsoft.VisualStudio.TestTools.UnitTesting.TestPropertyAttribute("$TestedClassName$", "$FirstTestName$")] public async System.Threading.Tasks.Task $FirstTestName$() { $END$ } ``` #### create test clase - for ms test ```csharp= [Microsoft.VisualStudio.TestTools.UnitTesting.TestClassAttribute] public class $TestedClassName$Tests { [Microsoft.VisualStudio.TestTools.UnitTesting.TestInitializeAttribute] public void TestInitialize() { } [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute] [Microsoft.VisualStudio.TestTools.UnitTesting.OwnerAttribute("$Owner$")] [Microsoft.VisualStudio.TestTools.UnitTesting.TestCategoryAttribute("$TestedClassName$")] [Microsoft.VisualStudio.TestTools.UnitTesting.TestPropertyAttribute("$TestedClassName$", "$FirstTestName$")] public async System.Threading.Tasks.Task $FirstTestName$() { $END$ } } ``` ## Code Style ### C# File Layout ```xml <?xml version="1.0" encoding="utf-16"?> <Patterns xmlns="urn:schemas-jetbrains-com:member-reordering-patterns"> <TypePattern DisplayName="Non-reorderable types"> <TypePattern.Match> <Or> <And> <Kind Is="Interface" /> <Or> <HasAttribute Name="System.Runtime.InteropServices.InterfaceTypeAttribute" /> <HasAttribute Name="System.Runtime.InteropServices.ComImport" /> </Or> </And> <Kind Is="Struct" /> <HasAttribute Name="JetBrains.Annotations.NoReorderAttribute" /> <HasAttribute Name="JetBrains.Annotations.NoReorder" /> </Or> </TypePattern.Match> </TypePattern> <TypePattern DisplayName="MS Test Fixtures" RemoveRegions="All"> <TypePattern.Match> <And> <Kind Is="Class" /> <HasAttribute Name="Microsoft.VisualStudio.TestTools.UnitTesting.TestClassAttribute" Inherited="True" /> </And> </TypePattern.Match> <Entry DisplayName="All other members" /> <Entry DisplayName="Setup/Teardown Methods"> <Entry.Match> <And> <Kind Is="Method" /> <Or> <HasAttribute Name="Microsoft.VisualStudio.TestTools.UnitTesting.TestInitializeAttribute" Inherited="True" /> <HasAttribute Name="Microsoft.VisualStudio.TestTools.UnitTesting.TestCleanupAttribute" Inherited="True" /> <HasAttribute Name="Microsoft.VisualStudio.TestTools.UnitTesting.ClassInitializeAttribute" Inherited="True" /> <HasAttribute Name="Microsoft.VisualStudio.TestTools.UnitTesting.ClassCleanupAttribute" Inherited="True" /> </Or> </And> </Entry.Match> <Entry.SortBy> <Kind Is="Member" /> </Entry.SortBy> </Entry> <Entry DisplayName="Test Methods" Priority="100"> <Entry.Match> <And> <Kind Is="Method" /> <HasAttribute Name="Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute" /> </And> </Entry.Match> <Entry.SortBy> <Name /> </Entry.SortBy> </Entry> <Entry DisplayName="Private Method"> <Entry.Match> <And> <Access Is="Private" /> <Kind Is="Method" /> </And> </Entry.Match> <Entry.SortBy> <Name /> </Entry.SortBy> </Entry> </TypePattern> <TypePattern DisplayName="xUnit.net Test Classes" RemoveRegions="All"> <TypePattern.Match> <And> <Kind Is="Class" /> <HasMember> <And> <Kind Is="Method" /> <HasAttribute Name="Xunit.FactAttribute" Inherited="True" /> </And> </HasMember> </And> </TypePattern.Match> <Entry DisplayName="All other members" /> <Entry DisplayName="Setup/Teardown Methods"> <Entry.Match> <Or> <Kind Is="Constructor" /> <And> <Kind Is="Method" /> <ImplementsInterface Name="System.IDisposable" /> </And> </Or> </Entry.Match> <Entry.SortBy> <Kind Order="Constructor" /> </Entry.SortBy> </Entry> <Entry DisplayName="Test Methods" Priority="100"> <Entry.Match> <And> <Kind Is="Method" /> <HasAttribute Name="Xunit.FactAttribute" /> </And> </Entry.Match> <Entry.SortBy> <Name /> </Entry.SortBy> </Entry> <Entry DisplayName="Private Method"> <Entry.Match> <And> <Access Is="Private" /> <Kind Is="Method" /> </And> </Entry.Match> <Entry.SortBy> <Name /> </Entry.SortBy> </Entry> </TypePattern> <TypePattern DisplayName="NUnit Test Fixtures" RemoveRegions="All"> <TypePattern.Match> <And> <Kind Is="Class" /> <HasAttribute Name="NUnit.Framework.TestFixtureAttribute" Inherited="True" /> </And> </TypePattern.Match> <Entry DisplayName="All other members" /> <Entry DisplayName="Setup/Teardown Methods"> <Entry.Match> <And> <Kind Is="Method" /> <Or> <HasAttribute Name="NUnit.Framework.SetUpAttribute" Inherited="True" /> <HasAttribute Name="NUnit.Framework.TearDownAttribute" Inherited="True" /> <HasAttribute Name="NUnit.Framework.FixtureSetUpAttribute" Inherited="True" /> <HasAttribute Name="NUnit.Framework.FixtureTearDownAttribute" Inherited="True" /> </Or> </And> </Entry.Match> </Entry> <Entry DisplayName="Test Methods" Priority="100"> <Entry.Match> <And> <Kind Is="Method" /> <HasAttribute Name="NUnit.Framework.TestAttribute" /> </And> </Entry.Match> <Entry.SortBy> <Name /> </Entry.SortBy> </Entry> <Entry DisplayName="Private Method"> <Entry.Match> <And> <Access Is="Private" /> <Kind Is="Method" /> </And> </Entry.Match> <Entry.SortBy> <Name /> </Entry.SortBy> </Entry> </TypePattern> <TypePattern DisplayName="Default Pattern"> <Entry DisplayName="Public Delegates" Priority="100"> <Entry.Match> <And> <Access Is="Public" /> <Kind Is="Delegate" /> </And> </Entry.Match> <Entry.SortBy> <Name /> </Entry.SortBy> </Entry> <Entry DisplayName="Public Enums" Priority="100"> <Entry.Match> <And> <Access Is="Public" /> <Kind Is="Enum" /> </And> </Entry.Match> <Entry.SortBy> <Name /> </Entry.SortBy> </Entry> <Entry DisplayName="Static Fields and Constants"> <Entry.Match> <Or> <Kind Is="Constant" /> <And> <Kind Is="Field" /> <Static /> </And> </Or> </Entry.Match> <Entry.SortBy> <Kind Order="Constant Field" /> </Entry.SortBy> </Entry> <Entry DisplayName="Fields"> <Entry.Match> <And> <Kind Is="Field" /> <Not> <Static /> </Not> </And> </Entry.Match> <Entry.SortBy> <Readonly /> <Name /> </Entry.SortBy> </Entry> <Entry DisplayName="Constructors"> <Entry.Match> <Kind Is="Constructor" /> </Entry.Match> <Entry.SortBy> <Static /> </Entry.SortBy> </Entry> <Entry DisplayName="Properties, Indexers"> <Entry.Match> <Or> <Kind Is="Property" /> <Kind Is="Indexer" /> </Or> </Entry.Match> <Entry.SortBy> <Extern /> </Entry.SortBy> </Entry> <Entry DisplayName="Interface Implementations" Priority="100"> <Entry.Match> <And> <Kind Is="Member" /> <ImplementsInterface /> </And> </Entry.Match> <Entry.SortBy> <ImplementsInterface Immediate="True" /> </Entry.SortBy> </Entry> <Entry DisplayName="All other members"> <Entry.SortBy> <Access /> <Name /> </Entry.SortBy> </Entry> <Entry DisplayName="Nested Types"> <Entry.Match> <Kind Is="Type" /> </Entry.Match> </Entry> </TypePattern> </Patterns> ```