2

DAL に Entity Framework を使用しています。rhino モックを使用して単体テストを作成し、リポジトリをテストしようとしています。タイプが のプロパティの戻り値を設定しようとして困っていますIQueryable<Restaurant>

単体テストを実行すると、取得し続けます

Unit.Tests.Infrastructure.Repository.WhenInvoked.ShouldReturnAllRestaurants: System.InvalidOperationException: 前のメソッド 'IEnumerator.MoveNext();' 戻り値またはスローする例外が必要です。

私のコード:

public interface IDbContext
{
    IQueryable<Restaurant> Restaurants { get; }
    IQueryable<Review> Reviews { get; }
    int SaveChanges();
    T Attach<T>(T entity) where T : class;
    T Add<T>(T entity) where T : class;
    T Delete<T>(T entity) where T : class; 
}

public class OdeToFoodDB : DbContext, IDbContext
{
    public DbSet<Restaurant> Restaurants { get; set; }
    public DbSet<Review> Reviews { get; set; }

    IQueryable<Restaurant> IDbContext.Restaurants
    {
        get { return Restaurants; }
    }

    IQueryable<Review> IDbContext.Reviews
    {
        get { return Reviews; }
    }

    int IDbContext.SaveChanges()
    {
        return SaveChanges(); 
    }

    T IDbContext.Add<T>(T entity)
    {
        return Set<T>().Add(entity); 
    }

    T IDbContext.Delete<T>(T entity)
    {
        return Set<T>().Remove(entity);
    }

    T IDbContext.Attach<T>(T entity)
    {
        var entry = Entry(entity);
        entry.State = System.Data.EntityState.Modified;
        return entity;
    }
}

public class RestaurantRepository : IRestaurantRepository
{
    private IDbContext _db;

    public RestaurantRepository()
    {
        _db = ObjectFactory.GetInstance<IDbContext>();
    }

    public RestaurantRepository(IDbContext db)
    {
        _db = db;
    }


    public List<Restaurant> GetAllRestaurants()
    {
        return _db.Restaurants.ToList(); 
    }
}

    [Test]
    public void ShouldReturnAllRestaurants()
    {
        _db.Stub(m => m.Restaurants.AsQueryable()).Return(_restaurant.AsQueryable());

        var sut = _restaurantRepository.GetAllRestaurants();
        //Some assert statement later. 
    }
4

2 に答える 2

0

配列/コレクションなどを作成して .AsQueryable() を使用するだけです

于 2012-12-30T08:17:31.890 に答える
0

答えがわかります。Rhino では、Stub() メソッドでプロパティを指定しようとしているときに、プロパティ Restaurants を .AsQuerable() にする必要はありません。

    [Test]
    public void ShouldReturnAllRestaurants()
    {
        _db.Stub(m => m.Restaurants).Return(_restaurant.AsQueryable());

        var sut = _restaurantRepository.GetAllRestaurants();
        //Some assert statement later. 
    }
于 2012-12-31T18:32:07.197 に答える