次の機能の単体テストの作成に取り組んでいます..
public virtual FacadeClass InitNewAMSObject()
{
FacadeClass output = null;
if (ClassMapInfo != null)
{
// Override the metadata caching option
// sets property in external dll
Avectra.netForum.Common.Config.CacheMetaData = false;
if (!String.IsNullOrEmpty(ClassMapInfo.AMSClassName))
{
output = DataUtils.InstantiateFacadeObject(ClassMapInfo.AMSClassName);
}
}
else
{
throw new System.ApplicationException("Need to add the attribute");
}
return output;
}
「sets property in external dll」というコメントの行を通過できません。私のシムは、テストされている関数に「それを引き継ぐ」ようには見えません。それは常にエラーをスローし、実際には私のシムの代わりにdllを使用しようとしています。プロパティを false のみに設定しているように見えるかもしれませんが、dll はそのプロパティをメソッドのようにセッターで使用します。.Config のコンストラクター (dll 内) がデータベース接続をセットアップしようとしているため、.Config は常にエラー状態になります。少なくとも null 状態で、.Fakes. クラス名に。サードパーティであるこのdllを作成していないため、スキップしたいだけです。
私は1日調査しましたが、参照されているdllに設定されているプロパティをシムする方法の例はどこにも見つかりません。
これが私の現在の価値のテストです
[TestMethod]
public void InitNewAMSObjectTEST()
{
using (ShimsContext.Create())
{
Address amsc = new Address();
bool test = true;
ShimConfig.CacheMetaDataGet = () => test;
ShimConfig.CacheMetaDataSetBoolean = value => test = value;
amsc.InitNewAMSObject();
}
}