Лучшая практика модульного тестирования? Атрибут / C # InternalsVisibleTo () для VBNET 2.0 во время тестирования?

Я создаю оболочку Active Directory в VBNET 2.0 (не могу использовать более позднюю версию .NET), в которой у меня есть следующее:

  1. IUtilisateur
  2. IGroupe
  3. IUniteOrganisation

Эти интерфейсы реализованы во внутренних классах (Friend в VBNET), поэтому я хочу реализовать фасад, чтобы связать каждый из интерфейсов с их внутренними классами. Это повысит гибкость архитектуры и т. Д.

Теперь я хочу протестировать эти классы (Utilisateur, Groupe, UniteOrganisation) в другом проекте в том же решении. Однако эти классы являются внутренними. Я хотел бы иметь возможность создавать их экземпляры, не просматривая мой фасад, но только для этих тестов, не более того.

Вот фрагмент кода, чтобы проиллюстрировать это:

public static class DirectoryFacade {
    public static IGroupe CreerGroupe() {
        return new Groupe();
    }
}

// Then in code, I would write something alike:

public partial class MainForm : Form {
    public MainForm() {
        IGroupe g = DirectoryFacade.CreerGroupe();
        // Doing stuff with instance here...
    }
}

// My sample interface:

public interface IGroupe {
    string Domaine { get; set; }
    IList<IUtilisateur> Membres { get; }
}

internal class Groupe : IGroupe {
    private IList<IUtilisateur> _membres;

    internal Groupe() {
        _membres = new List<IUtilisateur>();
    }

    public string Domaine { get; set; }
    public IList<IUtilisateur> Membres {
        get {
            return _membres;
        }
    }
}

Недавно я слышал об атрибуте InternalsVisibleTo (). Мне было интересно, доступен ли он в VBNET 2.0 / VS2005, чтобы я мог получить доступ к внутренним классам assmebly для моих тестов? Иначе как я мог этого добиться?

ИЗМЕНИТЬ. Это хорошая практика тестирования, чтобы продолжать, как я?


person Will Marcouiller    schedule 13.05.2010    source источник


Ответы (1)


Да, атрибут InternalsVisibleTo доступен в vb.net и работает с типами друзей.

person Joel Coehoorn    schedule 13.05.2010
comment
Он работает в .NET 2.0? Какую сборку мне следует импортировать, чтобы использовать ее? - person Will Marcouiller; 13.05.2010
comment
Это в System.Runtime.CompilerServices. Дополнительная информация здесь: msdn.microsoft.com/en-us/library/ - person Joel Coehoorn; 13.05.2010
comment
И это хорошая практика для тестирования, или есть другое лучшее решение? - person Will Marcouiller; 13.05.2010
comment
Я думаю, что до сих пор ведутся споры о том, является ли это лучшей практикой, в ожидании других методов, таких как IoC, но это определенно обычная практика. - person Joel Coehoorn; 13.05.2010
comment
Является ли это хорошей практикой - это своего рода философский аргумент. Для меня это во многом зависит от того, является ли это приложение внутренним для организации, выпущенное программное обеспечение или API. - person btlog; 13.05.2010
comment
Я использовал InternalVisibleAttribute, но, похоже, он не работает с внутренними классами. Я не могу создать экземпляр своего класса Groupe из моего проекта Tests. знак равно - person Will Marcouiller; 13.05.2010