Вы пытаетесь проверить CoinsService
, потому что это делает сложение. Поэтому вы должны использовать real CoinsService
, а не издеваться над ним. Насмешка предназначена для классов, которые сотрудничают с классом, который вы пытаетесь протестировать.
Глядя на ваш код, я понимаю, почему вы думали, что это должно работать ... у вас есть эта строка кода ...
coinsService.Coins.Returns(new ReactiveProperty<long>());
Это приводит к тому, что при каждом обращении к нему создается новое свойство Coins
, поэтому вы видите ошибку, которую видите.
Я подозреваю, что причина root в том, что CoinsService
- это большой класс с большим количеством функциональных возможностей, который вы не хотите создавать, просто чтобы протестировать возможность добавления копий. Это приводит к желанию высмеивать это. (Если это не так, мы можем остановиться здесь - просто не издевайтесь!)
Если CoinsService
«слишком большой, чтобы проверить», то его нужно разбить таким образом, чтобы он использует соавторов. Например, представьте, что Coins
был классом, а не просто длинным. Он может иметь метод Add ... Add(long howmuch)
, например.
Тогда CoinsService
будет немного изменен, чтобы сделать ...
public int Add(int coins)
{
Coins.Add(coins);
return Coins.Value; // I believe your original return is in error
}
Теперь это все немного более косвенный, но дает вам преимущество в том, что вы можете протестировать функцию сложения, протестировав класс Coins, без использования сервиса.
Вы также можете (и должны) протестировать сам сервис, создав макет для Монеты и обеспечение того, чтобы его метод Add
вызывался при вызове CoinService.Add
.