File Layout是Resharper中一個非常實用的功能,
它可以針對自訂的規則進行程式碼排版,
本篇將以新增MsTest的模板為例,
介紹如何訂製自己想要的File Layout。
檢視Default Pattern
在開始介紹之前,
我們先看一下Resharper預設提供的Default Pattern有哪些可以調整的選項。
請點選Resharper -> Options -> Code Editing -> C# -> File Layout,
接著會看到一個Default Pattern的畫面。
當程式碼被分類為Default Layout時,
將會依據由上到下的清單選項(Item)進行排序,
例如:
- Public Delegates
- Public Enums
- Static Fields and Constants
- ...
接著點選任意的Item(例如Public Delegates),
我們可以看到在右下角Misc的部分,
可對指定的清單選項再進行排序。
預設第一個Sort是依據名稱排序,
在Then By部分是未指定的(None),
而當你指定新的Then By條件之後,
介面就會長出新的Then By。
我個人是還蠻喜歡這種彈性的做法的!
觀察NUnit Pattern設計方式
接著我們點選大大的左箭頭回到上一層,
可以看到在預設提供的Pattern中是不包含MsTest的,
我想先觀察NUnit的Layout設計方式,
來打造一個MsTest的Layout。
透過連點NUnit Test Fixtures,
可檢視目前NUnit排序用的清單選項,
在右上角有個設定的圖式,
點選之後可切換成約束檢視(Constrains View),
看完這張圖,
我想大家都猜到了它是如何去偵測程式碼的測試類型了吧!
沒錯,就是透過Attribute的命名空間。
但實際上Resharper提供調整的部分不只這些!
看看右方的Toolbox就會發現有滿山滿谷的條件限制選項讓你選用!
扯遠了,我們一樣點選右上角的圖式切換回組件檢視(Composition View)。
可以看到這個Layout的排序優序如下:
- Static Fields and Constants
- All other members
- Setup/Teardown Methods
- Test Methods
其中跟NUnit比較有相關的為後面兩者,
所以我們點選這兩個清單選項進行觀察。
不難發現這邊也是用Attribute的命名空間(Namespace)作為程式方法的分辨依據,
搞懂遊戲規則之後我們就可以開始動手來打造一個MsTest Layout啦!
動手打造MsTest Layout
接著請點左箭回到上一層,
我們先複製NUnit的Pattern再來進行修改。
在NUnit前面的圖式點擊右鍵進行複製,
預設的Pattern名稱是可以重複的,
所以會在下方看到一個新的NUnit Test Fixtures,
我們先將其重新命名為MsTest Class,
並拖曳至Default Pattern上方調整優序。
然後點擊MsTest Class進到組件檢視,
並點選右上方設定圖式切換到約束檢視,
在這邊要設定MsTest測試類別的TestClassAttribute命名空間,
即Microsoft.VisualStudio.TestTools.UnitTesting.TestClassAttribute。
完成之後切換回組件檢視模式,
我希望將MsTest測試類別的成員順序調整如下:
- Static Fields and Constants
- Fields
- All other memers
- Test Initialize Method
- Test Cleanup Method
- Test Methods
- Methods
而前三項基本上可以沿用原NUnit的就好,
因此僅需針對其他四項進行調整。
而手法的部分與剛才一樣,
先複製NUnit原有的Setup/Teardown Methods再貼上,
重複複製兩次後就有四個方法了,
接著將方法組件的命名依據上述名稱進行調整。
最後再分別針對不同的Attribute指定不同的命名空間:
TestInitializeAttribute:Microsoft.VisualStudio.TestTools.UnitTesting.TestInitializeAttribute
TestCleanupAttribute:Microsoft.VisualStudio.TestTools.UnitTesting.TestCleanupAttribute
TestMethods:Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute
而最後沒被歸類到的方法都歸屬於Methods的部分,
但我希望能夠先按照存取修飾子再依名稱排序,
所以在Misc的部分做了些調整。
最後在MsTest測試類別中使用Resharper>Edit>Cleanup Code(Ctrl+E+C),
即可透過Layout進行自動排序。
結語
我一直認為Resharper是.net開發人員的神器,
雖然用的人不算少,
但能夠發揮這把神器的人卻不多,
如果有想要學習更進階使用技巧的朋友,
我推薦91哥的極速開發課程,
那是一個顛覆你對Resharper想像的機會XD。
參考
https://www.jetbrains.com/help/resharper/File_and_Type_Layout.html