質問

私は狂っているので、私はこれを手に入れました

public class FrameworkDbTestBase : IDisposable
{
    protected readonly FrameworkDb Db;
    public FrameworkDbTestBase()
    {
        var connection = Effort.DbConnectionFactory.CreateTransient();
        Db = new FrameworkDb(connection);
    }

    public void Dispose()
    {
        Db.Dispose();
    }
}
.

これは努力でEF6を模擬しています。それを愛しているので、私はそのような変化が私のコードベースに対して起こっている間に継続的にテストを実行することができます...その素晴らしいですが残念ながら私はこの

に必要です。
public partial class FrameworkDb : DbContext
{
    public FrameworkDb() : base("DefaultConnection"){}
    public FrameworkDb(DbConnection connection): base(connection, true)
    {
        Configuration.LazyLoadingEnabled = false;
    }

    public DbSet<Site> Sites { get; set; }
...
.

EF6のモッキングを努力して行くためには、StructureMapがLong Constructorを持つFrameworkDBインスタンスをDBConnection注入パラメータで作成することを要していますので、これを取得します。

StructureMap.StructureMapException was unhandled by user code
  HResult=-2146232832
  Message=StructureMap Exception Code:  202
No Default Instance defined for PluginFamily System.Data.Common.DbConnection, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
  Source=StructureMap
  ErrorCode=202
.

のため息!私は私の目を転がしています...私はこの投稿に従って何度も掘り下げられた後、StructureMapが他のより短いコンストラクターを使ってください。構造体マップ - 私はGreedAlt Constructorを使いたくない!これを変更する必要があります:

For<FrameworkDb>().Use <FrameworkDb>();
.

この

For<FrameworkDb>().Use(() => new FrameworkDb());
.

それでも同じエラーがありません...そして私の統合テストはもう機能しなくても構いません...だから、それは接続の構築のみを使用し、実際には注射では実際に使用されません。それ自体...そのような運がありません...これを追加する:

For<DbConnection>().Use(() => new EntityConnection("DefaultConnection"));
.

私にそれを与えます:

StructureMap.StructureMapException was unhandled by user code
  HResult=-2146232832
  Message=StructureMap Exception Code:  207
Internal exception while creating Instance '00fbcc4f-c5f0-4eb3-b814-9d0ba1bb8e19' of PluginType System.Data.Common.DbConnection, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089.  Check the inner exception for more details.
  Source=StructureMap
  ErrorCode=207
.

あの理論のためにそれほど多くのこと... Ahum ...ソリューション誰か?こんにちは誰?

役に立ちましたか?

解決

誰もいない人に来て?答えはとても簡単です...ええ

var framework = new Framework();
For<FrameworkDb>().Use(() => framework);
.

とてもシンプルで、とてもエレガントで、あなたが知る必要があるもの!

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top