有些方法不想對外開放的時候,會設置成 Internal(只開放專案內部可以使用)或是 Private,但是當要寫測試的時候就會發現 Test Project 也無法使用該 Method,解決方法是將需要測試的 Method 都設成 Internal,並將該 Method 的所在 Project 設置 InternalsVisibleTo 即可。
以下會展示一下 .net framework 與 .net core 各要如何添加 InternalsVisibleTo 。
.net framework
在專案的 Properties 目錄下編輯 AssemblyInfo.cs,指定 Internal 要開放外部的 Test Project 名稱
[assembly: InternalsVisibleTo("MyProject.UnitTest")]
.net core
由於 .net core 已經沒有 AssemblyInfo.cs 了,設置位置不太一樣。
有以下兩種設置方式,擇一即可。
(一)在被測試的各別 Class 加 attribute (要在 namespace
上方)
using System.Runtime.CompilerServices;
[assembly: InternalsVisibleTo("MyProject.UnitTest")]
namespace MyProject.Library;
public class MyService
{
internal string GetName()
{
................
}
}
(二)csproj 中進行全域的設置 ↓
<ItemGroup>
<AssemblyAttribute Include="System.Runtime.CompilerServices.InternalsVisibleToAttribute">
<_Parameter1>MyProject.UnitTest</_Parameter1>
</AssemblyAttribute>
</ItemGroup>
如果是在 csproj 設置的,在 .net core 他會自動幫你產生 AssemblyInfo,在 build 後至 obj 資料夾中可以看到 (如果是加 attribute 的方式就不會生成 AssemblyInfo)
裡面也會跟 .net framework 的 AssemblyInfo.cs 長的差不多