public void Loadall_Should_LoadAssembliesOnlyOnce()
        {
            string nameOfa1         = "A1";
            string nameOfa2         = "A2";
            var    twoAssemblyNames = new[]
            {
                new AssemblyName(nameOfa1),
                new AssemblyName(nameOfa2),
            };

            var       assemblyUtilMock = new Mock <IAssemblyUtils>();
            IAssembly a1 = CreateAssemblyMock("L1", nameOfa1).Object;


            var a2Mock = CreateAssemblyMock("L2", nameOfa2);

            a2Mock.Setup(a => a.GetReferencedAssemblies()).Returns(twoAssemblyNames);
            IAssembly a2 = a2Mock.Object;

            assemblyUtilMock.Setup(u => u.Load(a1.FullName)).Returns(a1);
            assemblyUtilMock.Setup(u => u.Load(a2.FullName)).Returns(a2);
            assemblyUtilMock.Setup(u => u.FileExists("filenameOfA1")).Returns(true);
            assemblyUtilMock.Setup(u => u.GetAssemblyNameInDirectory("AssemblyPath", a1.FullName)).Returns("filenameOfA1");
            assemblyUtilMock.Setup(u => u.LoadFrom("filenameOfA1")).Returns(a1);
            var sut = new AssemblyReader(assemblyUtilMock.Object);

            sut.AssemblyPath = "AssemblyPath";
            var assemblyMock = CreateAssemblyMock("Location", "Assembly");
            var assembly     = assemblyMock.Object;

            assemblyUtilMock.Setup(a => a.LoadFrom(assembly.Location)).Returns(assemblyMock.Object);
            assemblyMock.Setup(a => a.GetReferencedAssemblies()).Returns(twoAssemblyNames);

            sut.Loadall(assembly);
            sut.Loadall(assembly);

            assemblyUtilMock.Verify(u => u.LoadFrom(assembly.Location), Times.Once);
            assemblyUtilMock.Verify(u => u.Load(a1.FullName), Times.Never);
            assemblyUtilMock.Verify(u => u.LoadFrom("filenameOfA1"), Times.Once);
            assemblyUtilMock.Verify(u => u.Load(a2.FullName), Times.Once);
        }