2015-12-23 3 views
0

У меня есть контракт с данными Foo со следующей структурой.Создать тестовый объект DataContract с некоторыми внутренними свойствами?

[DataContract] 
public sealed class Foo 
{ 
    [DataMember] 
    public String Type 
    { 
     get; 
     internal set; 
    } 
    } 

Для целей тестирования я хочу, чтобы создать экземпляр Foo с определенным типом, но я не могу установить свойство Type после создания его экземпляра, потому что это внутреннее свойство. Как я могу это достичь?

Одна из идей - создать сериализованную версию объекта, а затем использовать десериализатор для создания экземпляра объекта, возможно ли это, и если да, то как я могу это сделать?

+0

У вас есть отдельный тест сборки? Вы пытались указать атрибут InternalsVisibleTo для тестовой сборки? Таким образом, вы можете получить доступ к внутренним членам. –

+0

Да, у меня есть отдельная тестовая сборка. Я знаю свойство 'InternalsVisibleTo'. Я пытался найти другой способ, специфичный для Data Contracts. –

ответ

1

Используйте атрибут System.Runtime.CompilerServices.InternalVisibleTo в сборке продукта, чтобы отметить внутренние элементы, видимые для проверки сборки.

В вашем AssemblyInfo.cs файле:

[assembly: System.Runtime.CompilerServices.InternalsVisibleTo("YourTestAssembly.dll, PublicKey=123456")] 
0

Есть 2 конструкторов на классе:

public Foo(); 

public Foo (string type) { 
    Type = type; 
} 

И использовать второй конструктор для тестирования.

+0

Что делать, если мне не разрешено изменять структуру объекта? –

+0

Код всегда должен быть записан как проверяемый. Если вы не можете изменить код, вы не можете его проверить .. Добавление конструктора не изменяет контракт данных в вашем случае. – Marc

+0

Затем вы можете использовать System.Runtime.CompilerServices.InternalVisibleTo для обеспечения внутреннего доступа к тестовому проекту. –

Смежные вопросы