2009-07-06 6 views
0

La seconde assertion exécute jamais dans le test unitaire ci-dessous:Est-ce que Moq ignore les espaces de noms lors de la configuration de faux?

namespace Foo { 
    public class MyClass { 
    } 
} 

namespace Bar { 
    public class MyClass { 
    } 
} 

namespace Quux { 
    public interface IRepo { 
     object Get<T>() where T : new(); 
    } 
} 

namespace Tests { 
    [TestFixture] 
    public class MyTests { 
     private Mock<Quux.IRepo> repo = new Mock<Quux.IRepo>(); 

     [SetUp] 
     public void Setup() { 
      repo.Setup(r => r.Get<Foo.MyClass>()).Returns(new Object()); 
      repo.Setup(r => r.Get<Bar.MyClass>()).Returns(new Object()); 
     } 

     [Test] 
     public void Test() { 
      Assert.IsNotNull(repo.Object.Get<Foo.MyClass>()); 
      Assert.IsNotNull(repo.Object.Get<Bar.MyClass>()); // Never reached. 
     } 
    } 
} 

On dirait la mise en place < Obtenir Bar.MyClass >() écrasez la configuration pour Get <Foo.MyClass>(). Cela signifie-t-il que Moq ignore les espaces de noms Foo et Bar lors de la configuration Get <T>()? Y at-il un moyen de contourner cela sans renommer les classes MyClass et sans implémenter IRepo? J'utilise Moq 3.1.416.3.

Mise à jour: Cela ressemble à fixed pour la prochaine version.

Répondre

1

Moq n'ignore pas les espaces de noms. Cela ressemble à un bug. Le bon endroit pour le signaler serait à http://code.google.com/p/moq/issues/entry

+0

Merci. Je vais le signaler quand j'ai une chance. –

+0

Problème signalé: http://code.google.com/p/moq/issues/detail?id=187 –

Questions connexes