Я пытаюсь выполнить модульное тестирование метода Comos DB - MongoDb API FindAll()
, высмеивая ContextComsDb.
public class ContextCosmosDb
{
public virtual IMongoClient Client { get; set; }
public virtual IMongoDatabase Database { get; set; }
public ContextCosmosDb(IOptionsCosmosDb options)
{
var settings = MongoClientSettings.FromUrl(new
MongoUrl(options.MongoApiConnectionString));
settings.SslSettings =
new SslSettings { EnabledSslProtocols = SslProtocols.Tls12 };
Client = new MongoClient(settings);
Database = (Client != null) ?
Client.GetDatabase(options.DatabaseName) : null;
}
}
public abstract class RepositoryBaseCosmosDb<T> :
IRepositoryBaseCosmosDb<T> where T : EntityBaseCosmosDb
{
public RepositoryBaseCosmosDb(ContextCosmosDb cosmosDbContext)
{
RepositoryContext = cosmosDbContext;
}
public IQueryable<T> FindAll()
{
return RepositoryContext.Database.GetCollection<T>
(CollectionName).AsQueryable();
}
}
Ниже приведено то, что я написал для проверки.
public class RepositoryBaseCosmosDbTest
{
[Trait("Category", "FindAll")]
[Fact]
public void FindAll_ShouldReturnAllData()
{
// Arrange
var mongoDatabase = new Mock<IMongoDatabase>();
var collection = new Mock<IMongoCollection<CosmosDbBlog>>();
var context = new Mock<ContextCosmosDb>
(new OptionsCosmosDb<ContextCosmosDb> ("mongodb://localhost", "test"));
collection.Object.InsertOne(new CosmosDbBlog { BlogId = 1, Name = "BBB" });
collection.Object.InsertOne(new CosmosDbBlog { BlogId = 2, Name = "ZZZ" });
collection.Object.InsertOne(new CosmosDbBlog { BlogId = 3, Name = "AAA" });
context.Setup(x => x.Database.GetCollection<CosmosDbBlog>
("CosmosDbBlogList", null)).Returns(collection.Object);
var service = new BlogRepositoryCosmosDb<CosmosDbBlog>(context.Object);
// Act
var blogs = service.FindAll();
// Assert
Assert.True(blogs.Select(b => b.Name == "BBB").Any());
Assert.True(blogs.Select(b => b.Name == "ZZZ").Any());
Assert.True(blogs.Select(b => b.Name == "AAA").Any());
}
}
Я получаю
System.NullReferenceException: 'Ссылка на объект не установлена для экземпляра объекта'
пока я делаю Assert. Пожалуйста, помоги, если можешь!