Entity Framework FakeDbSet

為了單元測試,需要作假資料,如果用資料庫來做,就需要考慮測試資料的建立以及 Transaction 的問題,因為建立測試資料後還得刪除。

所以可以使用 Mock 的方式,把 IDbSet 改成使用 InMemory

目前 Nuget.org 就有一個套件,可以幫忙你實作 InMemorySet 我目前是安裝 AnotherFakeDbSet,Source 在 Github-AnotherFakeDbSet

這個 Source 的原始版本是 FakeDbSet 不過我也覺得 AnotherFakeDbSet 改的不錯,而且因為陸續有推出新版本,所以我自己也是採用這個 Nuget Package


log4net Action Log 設定

我之前設定網站執行的 Action Log 的一個記錄,有些東西都是拼拼湊湊出來的,並不見得是最佳版本

log4net 設定檔

1
<?xml version="1.0" encoding="utf-8" ?>
2
<log4net>
3
    <root>
4
        <level value="DEBUG" />
5
        <appender-ref ref="stdout" />
6
        <appender-ref ref="ActionLogRollingFile" />
7
    </root>
8
    <appender name="ActionLogRollingFile" type="log4net.Appender.RollingFileAppender">
9
        <file type="log4net.Util.PatternString" value="action.log" />
10
        <appendToFile value="true" />
11
        <encoding value="utf-8" />
12
        <maxSizeRollBackups value="30" />
13
        <rollingStyle value="Date" />
14
        <datePattern value="'.'yyyy-MM-dd" />
15
        <layout type="log4net.Layout.PatternLayout">
16
            <conversionPattern value="(%date{HH:mm:ss,fff}) [%t] - %u %5property{Duration} %property{StatusCode} %6property{Method} %property{Uri} %m%n " />
17
        </layout>
18
        <filter type="log4net.Filter.LoggerMatchFilter">
19
            <acceptOnMatch value="true" />
20
            <LoggerToMatch value="Sample.Web.Filters.WebApiActionFilter" />
21
        </filter>
22
23
        <filter type="log4net.Filter.DenyAllFilter" />
24
    </appender>
25
</log4net>

其中要注意的是

  • log4net.Filter.LoggerMatchFilter: 用來設定特定的 class 記錄才使用這個 Appender
    • acceptOnMatch: 這個設定有點像是 blacklist/whitelist,true 表示有 match 才是,相當於 whitelist
    • LoggerToMatch: 設定要篩選的類別名稱
  • log4net.Filter.DenyAllFilter: 篩選掉其他的 Log,不會在這個 Appender 裡面記錄