Конечная точка службы OData - PullRequest
0 голосов
/ 12 июня 2018

Я пытаюсь смоделировать контекст службы OData, используя Moq, чтобы вернуть список фиктивных сущностей, чтобы я мог основывать свой модульный тест на этом.Я не могу представить свою реальную модель и приложение, поэтому я создал это смоделированное приложение, и часть, которую я представил, похожа.

MyOdataApplication, использующий ODataEndpoint, который я тестирую.

public class MyApplication
{
   private readonly IODataContext _odataContext;

   public MyApplication(IODataContext odataContext){
       _odataContext = odataContext;
   }

   public async Task<IEnumerable<Book>> GetBooks(string authorName)
   {
      IEnumerable<Book> books = null;
      var query = (DataServiceQuery<Book>)_odataContext.Books.Where(x => x.Author = authorName);
      books = await query.ExecuteAsync().ToList();
      return books;
   }

   public bool async ValidateBooks(string authorName){
       var books = await GetBooks(authorname);
       //other code....
   }
}

MyИнтерфейс контракта с сервисом Odata:

public interface IODataContext
{
   global::Microsoft.OData.Client.DataServiceQuery<global::models.Book> Books { get; }
}

Мой класс модульного тестирования выглядит следующим образом.

[TestFixture]
public class MyTestClass
{
   [Test]
   public void TestOdataFunctionality()
   {

     var mockODataEndpoint = new Mock<IODataContext>();

     //It fails here as its not able to convery IQueryable<Book> to DataServiceQuery<Book>
     mockODataEndpoint.Setup(x => x.GetBooks(It.IsAny<string>)).Returns(GetDummyBooks());

    var myApp = new MyApplication(mockODataEndpoint.Object);

    //This is my main method which I need to test.
    Task<bool> task = myApp.ValidateBooks("author name");
    var isvalid = task.Result;
    Assert.AreEqual(true, isvalid);
   }

   private DataServiceQuery<Book>GetDummyBooks()
   {
     var books = new List<Book>
        {
            new Book()
            {
                Name = "Book1",
                Author = "author name",
                //other properties...
            }
        };

        //Not sure how to achieve this. The below line is giving error ???
        return (DataServiceQuery<Book>)books.AsQueryable(); 
   }
} 

Как я могу издеваться над конечной точкой сервиса Odata, чтобы я мог протестировать свой метод ValidateBooks?

...