2015-04-14 5 views
1

У меня есть код в моем .cs файл, как показано нижеКак бросить фиктивный объект для исходного объекта CLR

public IfileGroup Placefile(int quantity, IFileGroup destfile, ILoc location) 
{  
    fileGroup fg = null; 
    cg = this.TransferFile(quantity, destfile as FileGroup, location); 
} 

Так в моем тестовом файл я создал фиктивный объект как этого

Mock<IFileGroup> frp = new Mock<IFileGroup>(); 
frp.Setup(x => x.FileInfo).Returns("FileAvailable"); 
Mock<ILoc> locationMock; 
locationMock.Setup(x => x.FileLocationId).Returns("10"); 

и вызов функция

FileGroup target = new FileGroup();  
var result = target.Placefile(4, frp.Object, locationMock.Object); 

, но при отладке, когда идет контроль функционировать Placefile она проходит destfile как null, есть ли способ сбрасывать из mock объекта в исходный объект CLR?

ответ

0

Поскольку макет реализует IFileGroup и не наследует от FileGroup, его невозможно отбросить.

Только если ваш класс FileGroup был абстрактным или предоставляет виртуальные методы, можете ли вы создать макет, который можно отличить от FileGroup. Это базовое .NET Inheritance для вас.

Вместо этого ваш код не должен опираться на FileGroup, но всегда должен полагаться на IFileGroup. Таким образом, призыв к TransferFile должен выглядеть следующим образом:

this.TransferFile(quantity, destfile as IFileGroup, location); 

Я подозреваю, что вам может понадобиться обновить подпись TransferFile для того, чтобы работать. Или вместо того, чтобы создать новый FileGroup объект вместо литья, так как приведение не гарантируется:

this.TransferFile(quantity, new FileGroup(destfile), location); 

Это не Mocking или литья, что нуждается в изменении, необходимо дополнительно реорганизовать API для того, чтобы быть действительно проверяемым.

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