2015-12-06 3 views
0

У меня есть статический класс, который создает экземпляр класса базы данных. Я ищу способ подделать/заглушить этот класс базы данных в своих тестах.Удаление класса, созданного статическим классом

public partial class Y : Form 
{ 
    static Models.DBModel db = new Models.DBModel(); 
    .... 

К сожалению, я не могу изменить код. Есть ли способ, которым я могу издеваться над этим классом базы данных в своих тестах?

+0

Если вызов этой переменной проходит один метод, вы можете переопределить этот метод. Othervise, вы можете попробовать использовать некоторые специальные структуры, такие как [TypeMock] (http://www.typemock.com/) или [Fakes] (https://msdn.microsoft.com/en-us/library/hh549175 (v = vs.110) .aspx) –

+0

Я использую подделки! Извините, кто-то удалил эту информацию из заголовка темы. Я просил о том, чтобы сделать это с помощью подделок. Я попытался создать прокладку DB перед созданием статического класса, но экземпляр DB, созданный статическим классом, не использует прокладку. – rev

+0

О, я не видел - информация о Microsoft Fakes была перенесена в тег. Это частное поле? Можете ли вы изменить его на защищенный, а затем вы можете переопределить этот класс и инициализировать это поле в construnctor. –

ответ

0

Это работает для меня:

I. Обновление yourdll.fakes включать:

... 
<ShimGeneration> 
    <Clear/> 
    ... 
    <Add FullName="Models.DBModel"/> 
    ... 
</ShimGeneration> 
... 

II. В вашем TestClass создать метод с [TestInitialize] и [TestCleanup] атрибута:

using Models.Fakes; 

IDisposable shimsContext; 

[TestInitialize] 
public void SetUp() 
{ 
    shimsContext = ShimsContext.Create(); 
    ShimDBModel.Constructor = (@this) => 
    { 
     ShimDBModel shim = new ShimDBModel(@this) 
     { 
      // here you can provide shim methods for DBModel 
     }; 
    }; 
} 

[TestCleanup] 
public void CleanUp() 
{ 
    // Let's do not forget to clean up shims after each test runs 
    shimsContext.Dispose(); 
} 

III. И, наконец, в вашем тесте, Y.db должен быть Shim создан в SetUp метод.

[TestMethod] 
public void Test() 
{ 
    Y.db... // db should be shim 
} 
Смежные вопросы