テスト中に問題が発生しています。私はいくつかの他のオブジェクトを持つ巨大な方法であり、今RefreshStrategyは、選択した人によると、データベースから、いくつかの戦略を取り、更新_lstStrategiesセッター内でプライベートメソッドをテストするにはどうすればいいですか?
public class ViewModel {
....
public string Person
{
get
{
return _person;
}
set
{
if (_person != value)
{
_person = value;
RefreshStrategy();
OnPropertyChanged();
Somefield = string.Empty;
}
}
}
public BindingList<string> Strategies
{
get
{
return _lstStrategies;
}
}
これらのもののようにクラスとプロパティを持っています。今、すべてが実行時に正常に動作しているが、私はそれをテストしようとすると、私が問題にしている:私はPerson = "Test"
を設定すると、明らかにRefreshStrategy()
は
[TestClass]
public class ViewModelTest
{
private ViewModel _viewobj;
public ViewModelTest()
{
_viewobj = new ViewModel();
}
[TestMethod]
public void TestStrategies()
{
_viewobj.Person = "Test";
Assert.AreEqual("AAAA", _viewobj.Strategies[0]);
}
private void RefreshStrategies()
{
Logger.log(Logger.INFO, $"GOT STRATEGIES");
// Reload these default options every time the form loads, in case some applications settings have been changed
if (String.IsNullOrEmpty(Trader) && !SettingsMgr.IsCompositePortfolio)
{
Person = Utility.SettingsMgr.PORTFOLIO_CODE;
}
if (!String.IsNullOrEmpty(Person))
{
string fund = _portfolios.Where((tt) => tt.PersonId == Person).Select(tt => tt.Fund).FirstOrDefault();
if (!string.IsNullOrEmpty(fund))
{
fund = "X";
}
var profitCenters = new List<ProfitCenter>();
try
{
Logger.log(Logger.INFO, $"Try to load strategies for {Person} {fund}");
var pci = DataMgr.getInstance().GetProfitCenterInfo(Person, fund);
Logger.log(Logger.INFO, $"HERE !!!");
profitCenters = pci?.profitCenters;
}
......
}
と呼ばれるが、すべてのオブジェクトの内側にはnullであり、それは」例外が発生します。.. .nullオブジェクト参照を参照解除しようとしました "。単純なLoggerが上がり始めています。もし私がコメントアウトしていれば、それはUtility.Settingのようなものです。
単純な変数のテストのようにこのクラスの簡単なテストを行うと、テストプロジェクトでは問題ありません。
私は間違っていますか?方法全体を嘲笑していますか?それがプライベートならどうですか?
RefreshStrategy関数を投稿してください。 – w0051977
'RefreshStrategy'を別のクラスに移動します。それのためのインターフェイスを作成し、次にインターフェイスを単に模擬することができます。 – FCin
@ Nkosi私の疑問は、私がそれを模倣する必要があるかどうかを理解することです。それは、テスト中に何かが見つからないためです。 – MaxMarcucci