TDD test class for ViewModel classMocking the class under test with private method callsMock/unit test for this IRepositoryService method/classREST Web Api unit test endpoint validity with NUnit and MoqReturning a viewmodelMultiple Services and Test SetupUnit testing - test class inheritance vs single test classA reusable Previous/Next Contact Collection ViewModel classUnit test with Moq callback anonymous functionClass to make Web Service callsAccessing View from ViewModel

Store Credit Card Information in Password Manager?

250 Floor Tower

Should I outline or discovery write my stories?

What should you do when eye contact makes your subordinate uncomfortable?

How much character growth crosses the line into breaking the character

Can I sign legal documents with a smiley face?

The screen of my macbook suddenly broken down how can I do to recover

How to indicate a cut out for a product window

Drawing ramified coverings with tikz

The IT department bottlenecks progress. How should I handle this?

"Spoil" vs "Ruin"

What is the evidence for the "tyranny of the majority problem" in a direct democracy context?

Does a 'pending' US visa application constitute a denial?

How do you make your own symbol when Detexify fails?

How can "mimic phobia" be cured or prevented?

Removing files under particular conditions (number of files, file age)

Non-trope happy ending?

What was the exact wording from Ivanhoe of this advice on how to free yourself from slavery?

Is it possible to put a rectangle as background in the author section?

It grows, but water kills it

Why did the HMS Bounty go back to a time when whales are already rare?

Longest common substring in linear time

On a tidally locked planet, would time be quantized?

Has any country ever had 2 former presidents in jail simultaneously?



TDD test class for ViewModel class


Mocking the class under test with private method callsMock/unit test for this IRepositoryService method/classREST Web Api unit test endpoint validity with NUnit and MoqReturning a viewmodelMultiple Services and Test SetupUnit testing - test class inheritance vs single test classA reusable Previous/Next Contact Collection ViewModel classUnit test with Moq callback anonymous functionClass to make Web Service callsAccessing View from ViewModel













1












$begingroup$


I am currently writing my first TDD application. The project is in Xamarin.Forms and tested in xUnit.



I am wondering if maybe more experienced developers will have any comments or suggestions regarding the code or architecture, before I will continue with next View Models, to avoid corrections.



I am using also Autofac and Moq.



Test class:



public class MainPageViewModelTests
w pliku



Tested View Model class:



public interface IMainPageViewModel

void LoadGroups();

public class MainPageViewModel : ViewModelBase, IMainPageViewModel

List<Phrase> oldPhrases = new List<Phrase>(); //verification for PopulateDb method;
private Func<IPhraseEditViewModel> _phraseEditVmCreator;
private IMainDataProvider _dataProvider;
public string FileLocation get; set;
public ObservableCollection<string> Groups get; set;
public List<Phrase> LoadedPhrases get; set;
public bool PhraseEdit get; set;
public IPhraseEditViewModel SelectedPhraseEditViewModel get; set;
public MainPageViewModel(IMainDataProvider dataProvider,
Func<IPhraseEditViewModel> phraseditVmCreator) //ctor

_dataProvider = dataProvider;
_phraseEditVmCreator = phraseditVmCreator;
Groups = new ObservableCollection<string>();
LoadedPhrases = new List<Phrase>();
//commands tests
AddPhraseCommand = new DelegateCommand(OnNewPhraseExecute);
LoadFile = new DelegateCommand(OnLoadFileExecute);


public ICommand AddPhraseCommand get; private set;
public ICommand LoadFile get; private set;

private void OnNewPhraseExecute(object obj)

SelectedPhraseEditViewModel = CreateAndLoadPhraseEditViewModel(null);


private IPhraseEditViewModel CreateAndLoadPhraseEditViewModel(int? phraseId)

//Application.Current.MainPage.Navigation.PushAsync(new PhraseEditPage());
var phraseEditVm = _phraseEditVmCreator();
PhraseEdit = true;
phraseEditVm.LoadPhrase(phraseId);
return phraseEditVm;

private async void OnLoadFileExecute(object obj)

LoadedPhrases.Clear();
FileLocation = await _dataProvider.PickUpFile();
LoadedPhrases = LoadFromFile(FileLocation);
PopulateDb(LoadedPhrases);
LoadGroups();

public void LoadGroups() //loads group list from the DB

Groups.Clear();
foreach (var group in _dataProvider.GetGroups())

Groups.Add(group);


public List<Phrase> LoadFromFile(string filePath)

if (filePath != "")
'))

int fieldCount = csv.FieldCount;
string[] headers = csv.GetFieldHeaders();
for (int i = 0; i < fieldCount; i++)

myPhraseMap[headers[i]] = i;

while (csv.ReadNextRecord())

Phrase phrase = new Phrase

Name = csv[myPhraseMap["Name"]],
Definition = csv[myPhraseMap["Definition"]],
Category = csv[myPhraseMap["Category"]],
Group = csv[myPhraseMap["Group"]],
Priority = csv[myPhraseMap["Priority"]],
Learned = false
;
LoadedPhrases.Add(phrase);



else

LoadedPhrases.Clear();

return LoadedPhrases;

public void PopulateDb(List<Phrase> phrases)

if (oldPhrases != phrases) //populates only if collection is new

foreach (var item in phrases)

_dataProvider.SavePhrase(item);

oldPhrases = phrases;





GitHub repository of the project










share|improve this question









New contributor




bakunet is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.







$endgroup$
















    1












    $begingroup$


    I am currently writing my first TDD application. The project is in Xamarin.Forms and tested in xUnit.



    I am wondering if maybe more experienced developers will have any comments or suggestions regarding the code or architecture, before I will continue with next View Models, to avoid corrections.



    I am using also Autofac and Moq.



    Test class:



    public class MainPageViewModelTests
    w pliku



    Tested View Model class:



    public interface IMainPageViewModel

    void LoadGroups();

    public class MainPageViewModel : ViewModelBase, IMainPageViewModel

    List<Phrase> oldPhrases = new List<Phrase>(); //verification for PopulateDb method;
    private Func<IPhraseEditViewModel> _phraseEditVmCreator;
    private IMainDataProvider _dataProvider;
    public string FileLocation get; set;
    public ObservableCollection<string> Groups get; set;
    public List<Phrase> LoadedPhrases get; set;
    public bool PhraseEdit get; set;
    public IPhraseEditViewModel SelectedPhraseEditViewModel get; set;
    public MainPageViewModel(IMainDataProvider dataProvider,
    Func<IPhraseEditViewModel> phraseditVmCreator) //ctor

    _dataProvider = dataProvider;
    _phraseEditVmCreator = phraseditVmCreator;
    Groups = new ObservableCollection<string>();
    LoadedPhrases = new List<Phrase>();
    //commands tests
    AddPhraseCommand = new DelegateCommand(OnNewPhraseExecute);
    LoadFile = new DelegateCommand(OnLoadFileExecute);


    public ICommand AddPhraseCommand get; private set;
    public ICommand LoadFile get; private set;

    private void OnNewPhraseExecute(object obj)

    SelectedPhraseEditViewModel = CreateAndLoadPhraseEditViewModel(null);


    private IPhraseEditViewModel CreateAndLoadPhraseEditViewModel(int? phraseId)

    //Application.Current.MainPage.Navigation.PushAsync(new PhraseEditPage());
    var phraseEditVm = _phraseEditVmCreator();
    PhraseEdit = true;
    phraseEditVm.LoadPhrase(phraseId);
    return phraseEditVm;

    private async void OnLoadFileExecute(object obj)

    LoadedPhrases.Clear();
    FileLocation = await _dataProvider.PickUpFile();
    LoadedPhrases = LoadFromFile(FileLocation);
    PopulateDb(LoadedPhrases);
    LoadGroups();

    public void LoadGroups() //loads group list from the DB

    Groups.Clear();
    foreach (var group in _dataProvider.GetGroups())

    Groups.Add(group);


    public List<Phrase> LoadFromFile(string filePath)

    if (filePath != "")
    '))

    int fieldCount = csv.FieldCount;
    string[] headers = csv.GetFieldHeaders();
    for (int i = 0; i < fieldCount; i++)

    myPhraseMap[headers[i]] = i;

    while (csv.ReadNextRecord())

    Phrase phrase = new Phrase

    Name = csv[myPhraseMap["Name"]],
    Definition = csv[myPhraseMap["Definition"]],
    Category = csv[myPhraseMap["Category"]],
    Group = csv[myPhraseMap["Group"]],
    Priority = csv[myPhraseMap["Priority"]],
    Learned = false
    ;
    LoadedPhrases.Add(phrase);



    else

    LoadedPhrases.Clear();

    return LoadedPhrases;

    public void PopulateDb(List<Phrase> phrases)

    if (oldPhrases != phrases) //populates only if collection is new

    foreach (var item in phrases)

    _dataProvider.SavePhrase(item);

    oldPhrases = phrases;





    GitHub repository of the project










    share|improve this question









    New contributor




    bakunet is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
    Check out our Code of Conduct.







    $endgroup$














      1












      1








      1





      $begingroup$


      I am currently writing my first TDD application. The project is in Xamarin.Forms and tested in xUnit.



      I am wondering if maybe more experienced developers will have any comments or suggestions regarding the code or architecture, before I will continue with next View Models, to avoid corrections.



      I am using also Autofac and Moq.



      Test class:



      public class MainPageViewModelTests
      w pliku



      Tested View Model class:



      public interface IMainPageViewModel

      void LoadGroups();

      public class MainPageViewModel : ViewModelBase, IMainPageViewModel

      List<Phrase> oldPhrases = new List<Phrase>(); //verification for PopulateDb method;
      private Func<IPhraseEditViewModel> _phraseEditVmCreator;
      private IMainDataProvider _dataProvider;
      public string FileLocation get; set;
      public ObservableCollection<string> Groups get; set;
      public List<Phrase> LoadedPhrases get; set;
      public bool PhraseEdit get; set;
      public IPhraseEditViewModel SelectedPhraseEditViewModel get; set;
      public MainPageViewModel(IMainDataProvider dataProvider,
      Func<IPhraseEditViewModel> phraseditVmCreator) //ctor

      _dataProvider = dataProvider;
      _phraseEditVmCreator = phraseditVmCreator;
      Groups = new ObservableCollection<string>();
      LoadedPhrases = new List<Phrase>();
      //commands tests
      AddPhraseCommand = new DelegateCommand(OnNewPhraseExecute);
      LoadFile = new DelegateCommand(OnLoadFileExecute);


      public ICommand AddPhraseCommand get; private set;
      public ICommand LoadFile get; private set;

      private void OnNewPhraseExecute(object obj)

      SelectedPhraseEditViewModel = CreateAndLoadPhraseEditViewModel(null);


      private IPhraseEditViewModel CreateAndLoadPhraseEditViewModel(int? phraseId)

      //Application.Current.MainPage.Navigation.PushAsync(new PhraseEditPage());
      var phraseEditVm = _phraseEditVmCreator();
      PhraseEdit = true;
      phraseEditVm.LoadPhrase(phraseId);
      return phraseEditVm;

      private async void OnLoadFileExecute(object obj)

      LoadedPhrases.Clear();
      FileLocation = await _dataProvider.PickUpFile();
      LoadedPhrases = LoadFromFile(FileLocation);
      PopulateDb(LoadedPhrases);
      LoadGroups();

      public void LoadGroups() //loads group list from the DB

      Groups.Clear();
      foreach (var group in _dataProvider.GetGroups())

      Groups.Add(group);


      public List<Phrase> LoadFromFile(string filePath)

      if (filePath != "")
      '))

      int fieldCount = csv.FieldCount;
      string[] headers = csv.GetFieldHeaders();
      for (int i = 0; i < fieldCount; i++)

      myPhraseMap[headers[i]] = i;

      while (csv.ReadNextRecord())

      Phrase phrase = new Phrase

      Name = csv[myPhraseMap["Name"]],
      Definition = csv[myPhraseMap["Definition"]],
      Category = csv[myPhraseMap["Category"]],
      Group = csv[myPhraseMap["Group"]],
      Priority = csv[myPhraseMap["Priority"]],
      Learned = false
      ;
      LoadedPhrases.Add(phrase);



      else

      LoadedPhrases.Clear();

      return LoadedPhrases;

      public void PopulateDb(List<Phrase> phrases)

      if (oldPhrases != phrases) //populates only if collection is new

      foreach (var item in phrases)

      _dataProvider.SavePhrase(item);

      oldPhrases = phrases;





      GitHub repository of the project










      share|improve this question









      New contributor




      bakunet is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.







      $endgroup$




      I am currently writing my first TDD application. The project is in Xamarin.Forms and tested in xUnit.



      I am wondering if maybe more experienced developers will have any comments or suggestions regarding the code or architecture, before I will continue with next View Models, to avoid corrections.



      I am using also Autofac and Moq.



      Test class:



      public class MainPageViewModelTests
      w pliku



      Tested View Model class:



      public interface IMainPageViewModel

      void LoadGroups();

      public class MainPageViewModel : ViewModelBase, IMainPageViewModel

      List<Phrase> oldPhrases = new List<Phrase>(); //verification for PopulateDb method;
      private Func<IPhraseEditViewModel> _phraseEditVmCreator;
      private IMainDataProvider _dataProvider;
      public string FileLocation get; set;
      public ObservableCollection<string> Groups get; set;
      public List<Phrase> LoadedPhrases get; set;
      public bool PhraseEdit get; set;
      public IPhraseEditViewModel SelectedPhraseEditViewModel get; set;
      public MainPageViewModel(IMainDataProvider dataProvider,
      Func<IPhraseEditViewModel> phraseditVmCreator) //ctor

      _dataProvider = dataProvider;
      _phraseEditVmCreator = phraseditVmCreator;
      Groups = new ObservableCollection<string>();
      LoadedPhrases = new List<Phrase>();
      //commands tests
      AddPhraseCommand = new DelegateCommand(OnNewPhraseExecute);
      LoadFile = new DelegateCommand(OnLoadFileExecute);


      public ICommand AddPhraseCommand get; private set;
      public ICommand LoadFile get; private set;

      private void OnNewPhraseExecute(object obj)

      SelectedPhraseEditViewModel = CreateAndLoadPhraseEditViewModel(null);


      private IPhraseEditViewModel CreateAndLoadPhraseEditViewModel(int? phraseId)

      //Application.Current.MainPage.Navigation.PushAsync(new PhraseEditPage());
      var phraseEditVm = _phraseEditVmCreator();
      PhraseEdit = true;
      phraseEditVm.LoadPhrase(phraseId);
      return phraseEditVm;

      private async void OnLoadFileExecute(object obj)

      LoadedPhrases.Clear();
      FileLocation = await _dataProvider.PickUpFile();
      LoadedPhrases = LoadFromFile(FileLocation);
      PopulateDb(LoadedPhrases);
      LoadGroups();

      public void LoadGroups() //loads group list from the DB

      Groups.Clear();
      foreach (var group in _dataProvider.GetGroups())

      Groups.Add(group);


      public List<Phrase> LoadFromFile(string filePath)

      if (filePath != "")
      '))

      int fieldCount = csv.FieldCount;
      string[] headers = csv.GetFieldHeaders();
      for (int i = 0; i < fieldCount; i++)

      myPhraseMap[headers[i]] = i;

      while (csv.ReadNextRecord())

      Phrase phrase = new Phrase

      Name = csv[myPhraseMap["Name"]],
      Definition = csv[myPhraseMap["Definition"]],
      Category = csv[myPhraseMap["Category"]],
      Group = csv[myPhraseMap["Group"]],
      Priority = csv[myPhraseMap["Priority"]],
      Learned = false
      ;
      LoadedPhrases.Add(phrase);



      else

      LoadedPhrases.Clear();

      return LoadedPhrases;

      public void PopulateDb(List<Phrase> phrases)

      if (oldPhrases != phrases) //populates only if collection is new

      foreach (var item in phrases)

      _dataProvider.SavePhrase(item);

      oldPhrases = phrases;





      GitHub repository of the project







      c# xamarin moq






      share|improve this question









      New contributor




      bakunet is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.











      share|improve this question









      New contributor




      bakunet is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.









      share|improve this question




      share|improve this question








      edited 14 mins ago









      Jamal

      30.4k11121227




      30.4k11121227






      New contributor




      bakunet is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.









      asked 5 hours ago









      bakunetbakunet

      61




      61




      New contributor




      bakunet is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.





      New contributor





      bakunet is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.






      bakunet is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.




















          0






          active

          oldest

          votes











          Your Answer





          StackExchange.ifUsing("editor", function ()
          return StackExchange.using("mathjaxEditing", function ()
          StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix)
          StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["\$", "\$"]]);
          );
          );
          , "mathjax-editing");

          StackExchange.ifUsing("editor", function ()
          StackExchange.using("externalEditor", function ()
          StackExchange.using("snippets", function ()
          StackExchange.snippets.init();
          );
          );
          , "code-snippets");

          StackExchange.ready(function()
          var channelOptions =
          tags: "".split(" "),
          id: "196"
          ;
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function()
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled)
          StackExchange.using("snippets", function()
          createEditor();
          );

          else
          createEditor();

          );

          function createEditor()
          StackExchange.prepareEditor(
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: false,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: null,
          bindNavPrevention: true,
          postfix: "",
          imageUploader:
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          ,
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          );



          );






          bakunet is a new contributor. Be nice, and check out our Code of Conduct.









          draft saved

          draft discarded


















          StackExchange.ready(
          function ()
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f216079%2ftdd-test-class-for-viewmodel-class%23new-answer', 'question_page');

          );

          Post as a guest















          Required, but never shown

























          0






          active

          oldest

          votes








          0






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes








          bakunet is a new contributor. Be nice, and check out our Code of Conduct.









          draft saved

          draft discarded


















          bakunet is a new contributor. Be nice, and check out our Code of Conduct.












          bakunet is a new contributor. Be nice, and check out our Code of Conduct.











          bakunet is a new contributor. Be nice, and check out our Code of Conduct.














          Thanks for contributing an answer to Code Review Stack Exchange!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid


          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.

          Use MathJax to format equations. MathJax reference.


          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function ()
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f216079%2ftdd-test-class-for-viewmodel-class%23new-answer', 'question_page');

          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          名間水力發電廠 目录 沿革 設施 鄰近設施 註釋 外部連結 导航菜单23°50′10″N 120°42′41″E / 23.83611°N 120.71139°E / 23.83611; 120.7113923°50′10″N 120°42′41″E / 23.83611°N 120.71139°E / 23.83611; 120.71139計畫概要原始内容臺灣第一座BOT 模式開發的水力發電廠-名間水力電廠名間水力發電廠 水利署首件BOT案原始内容《小檔案》名間電廠 首座BOT水力發電廠原始内容名間電廠BOT - 經濟部水利署中區水資源局

          Prove that NP is closed under karp reduction?Space(n) not closed under Karp reductions - what about NTime(n)?Class P is closed under rotation?Prove or disprove that $NL$ is closed under polynomial many-one reductions$mathbfNC_2$ is closed under log-space reductionOn Karp reductionwhen can I know if a class (complexity) is closed under reduction (cook/karp)Check if class $PSPACE$ is closed under polyonomially space reductionIs NPSPACE also closed under polynomial-time reduction and under log-space reduction?Prove PSPACE is closed under complement?Prove PSPACE is closed under union?

          Is my guitar’s action too high? Announcing the arrival of Valued Associate #679: Cesar Manara Planned maintenance scheduled April 23, 2019 at 23:30 UTC (7:30pm US/Eastern)Strings too stiff on a recently purchased acoustic guitar | Cort AD880CEIs the action of my guitar really high?Μy little finger is too weak to play guitarWith guitar, how long should I give my fingers to strengthen / callous?When playing a fret the guitar sounds mutedPlaying (Barre) chords up the guitar neckI think my guitar strings are wound too tight and I can't play barre chordsF barre chord on an SG guitarHow to find to the right strings of a barre chord by feel?High action on higher fret on my steel acoustic guitar