3

Xunit.net テストでいくつかのサードパーティ クラスをモックしようとして、dotnet コア プロジェクトに取り組んでいます。私が偽造しようとしているクラスは、Moq や NSubstitute のような制約のあるフレームワークではモックできません。そのためには、制約のないフレームワークが必要です。

.net コアテスト プロジェクトで DateTime.Now を偽造したいとします。

.net 4.5 には、MSFakes (Moles)、Smocks などがあります。いずれも dotnet コア フレームワークをまだサポートしていません。Shim はまだ dotnet コアに移植されていません。

現時点で .NET Core の私の目標を達成する分離フレームワークまたは手法を知っている人はいますか?

4

3 に答える 3

2

別の方法を試すこともできます。サードパーティのライブラリを独自のインターフェイスとラッパー クラスでラップします。次に、そのインターフェイスを実装するダミー オブジェクトを使用します。

DateTime.Now のような静的プロパティを使用すると、事態はさらに複雑になります。しかし、それは同様に機能します:プロパティでITimeProviderインターフェイスを定義しNowます。DateTimeWrapper : ITimeProvideraと aを追加しpublic DateTime Now => DateTime.Now;、 - 便宜上、必須ではありません - その周りに静的クラスを追加します。

static class MyClock 
{ 
    static ITimeProvider _Instance; 
    static void SetInstanceForTesting(ITimeProvider instance) 
    { _Instance = instance; }
    static DateTime Now => _Instance.Now; 
}

ITimeProviderまたは、インスタンスを必要とするオブジェクトにインスタンスを注入することもできます。

于 2016-11-30T09:39:08.593 に答える