В качестве бизнес-правила мы запрещаем использование определенного пространства имен , когда внутри этого другого пространства имен.Возможно ли в C# для модульного теста или анализа кода определить, используется ли пространство имен в классе?
Пример:
using X.A; //Allowed
using X.B; //Not allowed
namespace X.C
{
const string abc = X.A.MyClass.ABC; //Allowed
const string def = X.B.MyClass.DEF; //Not allowed, because we are using X.B
public void MyMethod()
{
string ghi = X.A.MyClass.GHI; //Allowed
string jkl = X.B.MyClass.JKL; //Not allowed because we are using X.B
string mno = "X.B.MyClass.MNO"; //Allowed, because we are not accessing X.B
}
}
Можно ли управлять этим с помощью теста блока, с помощью анализа кода, или оба, так что мы можем легко применять этот бизнес-правило, а не полагаться на просмотр кода, который может легко пропустить такую вещь? Предполагая, что это возможно, как бы вы это сделали?
Какова цель такого правила? Это действительно не кажется полезным. Почему бы вам просто не удалить ссылку на сборку? – poke
Модульные тесты предназначены для проверки _results_, а не _implementation_. Анализ кода, вероятно, можно было бы использовать для обнаружения этого использования. Если вы хотите сейчас спросить _how_, это можно сделать, добавьте это к своему вопросу и укажите инструмент для анализа кода _which_, который вы хотите использовать. –
Две или более сборки могут совместно использовать одну и ту же иерархию пространства имен. Вы можете поместить 'X.A' в одну dll и' X.B' в другую. Но на самом деле, контроль доступа по пространству имен неудобен, и вы будете бороться с инструментом, чтобы он работал. –