Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>Moq has an ability to run some code after the method is executed. It is called "Callback". Modify your code this way and it will work:</p> <pre><code>private IDataReader MockIDataReader() { var moq = new Mock&lt;IDataReader&gt;(); bool readToggle = true; moq.Setup(x =&gt; x.Read()) // Returns value of local variable 'readToggle' (note that // you must use lambda and not just .Returns(readToggle) // because it will not be lazy initialized then) .Returns(() =&gt; readToggle) // After 'Read()' is executed - we change 'readToggle' value // so it will return false on next calls of 'Read()' .Callback(() =&gt; readToggle = false); moq.Setup(x =&gt; x["Char"]) .Returns('C'); return moq.Object; } private class TestData { public char ValidChar { get; set; } } private TestData GetTestData() { var testData = new TestData(); using ( var reader = MockIDataReader() ) { testData = new TestData { ValidChar = (Char)reader["Char"] }; } return testData; } </code></pre> <p>But what if it will be required IDataReader to contain not only single row, but several? Well, here is a sample:</p> <pre><code>// You should pass here a list of test items, their data // will be returned by IDataReader private IDataReader MockIDataReader(List&lt;TestData&gt; ojectsToEmulate) { var moq = new Mock&lt;IDataReader&gt;(); // This var stores current position in 'ojectsToEmulate' list int count = -1; moq.Setup(x =&gt; x.Read()) // Return 'True' while list still has an item .Returns(() =&gt; count &lt; ojectsToEmulate.Count - 1) // Go to next position .Callback(() =&gt; count++); moq.Setup(x =&gt; x["Char"]) // Again, use lazy initialization via lambda expression .Returns(() =&gt; ojectsToEmulate[count].ValidChar); return moq.Object; } </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
    3. VO
      singulars
      1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload