2010-01-30 2 views
1

Je réécris cette question pour clarifier ce que je dois faire. Je suis en train d'utiliser Rhino-Mock à tester:Comment puis-je simuler une clause Where dans EF4

public IQueryable<TxRxMode> GetAllModes() 
    { 
     return m_context.TxRxModes.Where(txRxMode => txRxMode.Active); 
    } 

Voici le code:

var context = MockRepository.GenerateStub<IProjectContext>(); 

//Returns an empty list 
context.Expect(c => c.TxRxModes.Where(Arg<Func<TxRxMode, bool>>.Is.Anything)).Return(new List<TxRxMode>().AsQueryable()); 

TxRxModes dans une propriété IObjectSet sur le contexte et je le veux retourner un IQueryable<TxRxMode vide> objet lorsque la return m_context.TxRxModes.Where(txRxMode => txRxMode.Active); le code est appelé.

Quand je lance cela, l'Attendez-vous appel de méthode lance la ArgumentNullException:

valeur ne peut pas être nulle. Nom du paramètre: prédicat

J'ai essayé le plus simple:

IObjectSet<TxRxMode> modes = MockRepository.GenerateStub<IObjectSet<TxRxMode>>(); 
context.Expect(c => c.TxRxModes).Return(modes); 

mais Déclenche une exception référence nulle quand je l'appelle

return m_context.TxRxModes.Where(txRxMode => txRxMode.Active); 

En fait, cela fait partie de la méthode que je suis en train se moquer, donc la question clé est de savoir comment je me moque de cette déclaration Où?

Répondre

1

Où est réellement une méthode statique globale et vous ne devriez pas vous moquer de lui. Il fonctionne sur un IEnumerable cependant et vous pourriez juste vous moquer de cela.

Son genre de tracas le fait avec des rhinocéros mock cependant. Je recommande de faire le simulacre manuellement (si vous avez besoin de le faire du tout).

+0

Bon point sur le statique, j'avais raté ça. J'ai essayé de simuler manuellement l'interface IObjectSet et devez maintenant fournir un objet IQueryProvider. Plus de fouilles nécessaires! –