Build Solution - gubi dodaną bibliotekę Moq.dll z Reference projektu NUnit

0

Do projektu testów NUnit dodałem bibliotekę Moq.dll (dodałem przez Reference projektu) potem dodałem ją do klasy testu przez using i w trakcie pisania kodu normalnie miałem dostęp do niej (IntelliSence korzystało z niej).

Po napisaniu testu do końca, zrobiłem Rebuild Soultion i pokazało mi ze using wskazuje na nieznany namespace. Dodałem Moq.dll jeszcze raz przez reference i błąd zniknął. Ale nadal nie mogę uruchomić programu i testów przebudować nie mogę, bo po każdej próbie uruchomienia całości (F5) czy buildzie (F6) krzyczy ze nie ma referencji do Moq w using i Mock w kodzie. Jak ponownie dodam przez Reference to błędy znikną az nie nacisne F5 lub F6.

Gdzie popełniam błąd przy dodawaniu tej biblioteki?

0

Ok znalazłem rozwiązanie:
http://4programmers.net/Forum/C_i_.NET/120621-dodana_referencja_do_*dll_nie_jest_rozpoznawana_przy_kompilacji

moge już uruchomić cały program ale nadal mam problem z testami. Najpierw po Buildzie brakowało Castle.Core.dll, która była w paczce Moq ale w katalogu Silverlight, a po dodaniu tej biblioteki krzyczy ze brakuje mu System.Xml, chociaz jest dodana w Reference:

cały komunikat błędu w oknie uruchomieniowym NUnit, po uruchomieniu testów:

 
NUnitTests.Data_Akcess.DanePodstawowe.PracownikRepositoryTest.AddTest:
SetUp : System.IO.FileNotFoundException : Could not load file or assembly 'System.Xml, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e' or one of its dependencies. Nie można odnaleźć określonego pliku.

i jeszcze szczegóły:

at Castle.DynamicProxy.Generators.InterfaceProxyWithTargetGenerator.CreateFields(ClassEmitter emitter, Type proxyTargetType)
at Castle.DynamicProxy.Generators.InterfaceProxyWithTargetGenerator.Init(String typeName, ClassEmitter& emitter, Type proxyTargetType, FieldReference& interceptorsField, IEnumerable`1 interfaces)
at Castle.DynamicProxy.Generators.InterfaceProxyWithoutTargetGenerator.GenerateType(String typeName, Type proxyTargetType, Type[] interfaces, INamingScope namingScope)
at Castle.DynamicProxy.Generators.InterfaceProxyWithTargetGenerator.GenerateCode(Type proxyTargetType, Type[] interfaces, ProxyGenerationOptions options)
at Castle.DynamicProxy.DefaultProxyBuilder.CreateInterfaceProxyTypeWithoutTarget(Type interfaceToProxy, Type[] additionalInterfacesToProxy, ProxyGenerationOptions options)
at Castle.DynamicProxy.ProxyGenerator.CreateInterfaceProxyWithoutTarget(Type interfaceToProxy, Type[] additionalInterfacesToProxy, ProxyGenerationOptions options, IInterceptor[] interceptors)
at Moq.Proxy.CastleProxyFactory.CreateProxy[T](ICallInterceptor interceptor, Type[] interfaces, Object[] arguments) in d:\Code\moq\src\Source\Proxy\CastleProxyFactory.cs:line 78
at Moq.Mock`1.<InitializeInstance>b__0() in d:\Code\moq\src\Source\Mock.Generic.cs:line 138
at Moq.PexProtector.Invoke(Action action) in d:\Code\moq\src\Source\PexProtector.cs:line 56
at Moq.Mock`1.InitializeInstance() in d:\Code\moq\src\Source\Mock.Generic.cs:line 136
at Moq.Mock`1.OnGetObject() in d:\Code\moq\src\Source\Mock.Generic.cs:line 153
at Moq.Mock`1.get_Object() in d:\Code\moq\src\Source\Mock.Generic.cs:line 131
at NUnitTests.Data_Akcess.DanePodstawowe.PracownikRepositoryTest.Setup() in D:\Moje dokumenty\Dysk Google\miniMES_v2.0\-=Roboczy Folder Projekt-X=-\Project_X\NUnitTests\Data Akcess\DanePodstawowe\PracownikRepositoryTest.cs:line 23 

moja klasa testu wygląda tak:

 
[TestFixture]
    public class PracownikRepositoryTest
    {
        private Mock<IDanePodstawoweDataContext> mockPracownikDataContext;
        private IDanePodstawoweDataContextWrapper stubdataContextWrapper;
        private IPracownikRepository pracownikRep;

        [SetUp]
        public void Setup()
        {
            mockPracownikDataContext = new Mock<IDanePodstawoweDataContext>();
            stubdataContextWrapper = new StubDanePodstawoweDataContextWrapper(mockPracownikDataContext.Object);
            pracownikRep = new PracownikRepository(stubdataContextWrapper);

            #region Tworzenie pojedynczych pracowników p1, p2, p3, p4, p5
            Pracownik p1 = new Pracownik 
            {
                idPracownika = 5, Imie1 = "Admin", Nazwisko = "Adminowicz", Login = "Admin Adminowicz", mailFirmowy = "[email protected]", 
                telFirmowy1 = "123456789", idPrzelozonego = 113, idDzialu = 4,  idStanowiska = 1, DataZatrudnienia = new DateTime(2014,05,19), 
                idPlci = 1
            };
            Pracownik p2 = new Pracownik
            {
                idPracownika = 58,  Imie1 = "Kierownik_E", Nazwisko = "Kierowniczy", Login = "Kierownik_E Kierowniczy", 
                mailFirmowy = "[email protected]", telFirmowy1 = "506784001", idPrzelozonego = 113, idDzialu = 2, 
                idStanowiska = 4, DataZatrudnienia = new DateTime(2013,01,01), idPlci = 1
            };
            Pracownik p3 = new Pracownik 
            {
                idPracownika = 59,  Imie1 = "Technolog_E", Nazwisko = "Technologowicz", Login = "Technolog_E Technologowicz", 
                mailFirmowy = "[email protected]", telFirmowy1 = "506784002", idPrzelozonego = 113, idDzialu = 2, 
                idStanowiska = 2, DataZatrudnienia = new DateTime(2013,01,02), idPlci = 1
            };
            Pracownik p4 = new Pracownik 
            {
                idPracownika = 65,  Imie1 = "Pracownik1_E", Nazwisko = "Ariacki", Login = "Pracownik1_E Ariacki", 
                mailFirmowy = "[email protected]", telFirmowy1 = "506784008", idPrzelozonego = 58, idDzialu = 2,  
                idStanowiska = 20, DataZatrudnienia = new DateTime(2014, 05, 27), idPlci = 2
            };
            Pracownik p5 = new Pracownik
            {
                idPracownika = 113, Imie1 = "Prezes", Nazwisko = "Prezestowicz", Login = "Prezes Prezestowicz", 
                mailFirmowy = "[email protected]", telFirmowy1 = "506784028", idPrzelozonego = 113, idDzialu = 13, 
                idStanowiska = 16, DataZatrudnienia = new DateTime(2013, 01, 28), idPlci = 1
            };
            #endregion

            List<Pracownik> pracownicy = new List<Pracownik> { p1, p2, p3, p4, p5 };
            mockPracownikDataContext.Setup(x => x.Pracownicy()).Returns(new StubPracownikTable(pracownicy));
        }

        [Test]
        public void AddTest()
        {
            Assert.AreEqual(5, pracownikRep.Count());
           
            Pracownik nowy = new Pracownik
            {
                idPracownika = 1, Imie1 = "Nowy", Nazwisko = "Nowiński", Login = "Nowy Nowiński", mailFirmowy = "[email protected]", 
                telFirmowy1 = "506000666", idPrzelozonego = 113, idDzialu = 4, idStanowiska = 1, 
                DataZatrudnienia = new DateTime(2014, 06, 26),  idPlci = 1
            };

            pracownikRep.Add(nowy);

            Assert.AreEqual(6, pracownikRep.Count());
        }
    }

EDIT:
I jeszcze jeden trop o którym zapomniałem i nie wiem czy ma związek (bo rzucany jest wyjątek FileNotFoundException a ja w StubPracownikTable w miejscu o któtym pisze niżej wypycham NotImplementationException).

Mianowaicie, cały sposób testowania Reposytorium ściągnąłem z tego bloga:
http://myadventuresincoding.wordpress.com/2013/01/21/linq-to-sql-unit-testing-a-repository/

i tam w klasie StubEmployeeTable w liniach 34-47 są 3 właściwości:

public Type ElementType
public System.Linq.Expressions.Expression Expression
public IQueryProvider Provider

które z internalList wywołują metodę .AsQueryable(). ale takiej metody nie ma w typie List<T>, o co tu może chodzi?

EDIT:
wystarczy dodać using System.Data.Linq; i magicznie pojawiają się kolejne metody w typie List<T>

W swojej klasie StubPracownikTable z gettera tych 3 właściwości wypycham właśnie NotImplementationException.

PS. Zapytałbym autora ale angielski mam na poziomie odbioru, i to tylko ze stringa ;)

0

Patrzac na Twoj pierwszy test - stosuj AAA pattern.

1 użytkowników online, w tym zalogowanych: 0, gości: 1