0
コントローラを.netコアでテストしようとしましたが、時間が経っても修正できないエラーが発生しました。この問題は、コントローラへの転送によって疑似コンテキストで発生します。.netコアのコントローラのXUnitテストでエラーが発生しました。
コンテキストの例:テストの
public class Context : DbContext
{
public virtual DbSet<Exercise> ExerciseSet { get; set; }
public virtual DbSet<Tag> TagSet { get; set; }
public virtual DbSet<Type> TypeSet { get; set; }
public virtual DbSet<Difficulty> DifficultySet { get; set; }
public virtual DbSet<ExerciseTag> ExerciseTagSet { get; set; }
public virtual DbSet<Mark> MarkSet { get; set; }
public virtual DbSet<ExerciseMark> ExerciseMarkSet { get; set; }
public Context(DbContextOptions<Context> options)
: base(options)
{
}
}
例:
public class TagControllerTest
{
[Fact]
public void SimpleTest()
{
Assert.Equal(5, 5);
}
[Fact]
public void SimpleTest2()
{
Assert.Equal(5, 5);
}
[Fact]
public void ControllerGetTest()
{
//Arrange
var data = new List<Tag>
{
public virtual DbSet<Exercise> ExerciseSet { get; set; }
public virtual DbSet<Tag> TagSet { get; set; }
public virtual DbSet<Type> TypeSet { get; set; }
public virtual DbSet<Difficulty> DifficultySet { get; set; }
public virtual DbSet<ExerciseTag> ExerciseTagSet { get; set; }
public virtual DbSet<Mark> MarkSet { get; set; }
public virtual DbSet<ExerciseMark> ExerciseMarkSet { get; set; }
}.AsQueryable();
Mock<DbSet<Tag>> dbSetMock = new Mock<DbSet<Tag>>();
dbSetMock.As<IQueryable<Tag>>().Setup(m => m.Provider).Returns(data.Provider);
dbSetMock.As<IQueryable<Tag>>().Setup(m => m.Expression).Returns(data.Expression);
dbSetMock.As<IQueryable<Tag>>().Setup(m => m.ElementType).Returns(data.ElementType);
dbSetMock.As<IQueryable<Tag>>().Setup(m => m.GetEnumerator()).Returns(data.GetEnumerator());
Mock<Context> context = new Mock<Context>(dbSetMock.Object);
context.Setup(x => x.TagSet).Returns(dbSetMock.Object);
TagController controller = new TagController(context.Object);
// Act
var result = controller.GetTag();
// Assert
Assert.NotNull(result);
}
}
最初の2つのテストに合格したが、第3の試験は、ラインにエラーメッセージを与える:
TagController controller = new TagController(context.Object);
メッセージ:Castle.DynamicProxy.InvalidProxyConstructorArguments例外 :クラス:interview.Models.Contextのプロキシをインスタンス化できません。 与えられた引数にマッチするコンストラクタが見つかりませんでした: Castle.Proxies.DbSet`1Proxy