मुझे अपना यूनिट परीक्षण ठीक से काम करने के लिए नहीं मिल सकता है। यह एक एकीकरण परीक्षण में काम करता है जहां यह वास्तव में Azure टेबल संग्रहण को हिट करेगा। मुझे लगता है कि समस्या क्वेरी का उपयोग कर रहा है QueryableEntities जो नकली से क्वेरी करने योग्य है लेकिन यह DataServiceQuery सेवा कॉन्टेक्स्ट क्लास से लौटाता है। क्या प्रकार का स्टब बनाना संभव है DataServiceQuery जो एक प्रश्नोत्तरी वापस लौटाता है?मैं एमक का उपयोग कर स्टब के साथ विंडोज एज़ूर टेबल क्वेरी का परीक्षण कैसे करूं?
यह मेरा कोड है:
टेस्ट
[TestMethod]
public void GetAExistingWordInStorageShouldReturnCorrectWord()
{
Word expected = new Word(Dictionaries.Swedish.ToString(), "Word", "Word");
List<Word> Words = new List<Word>();
Words.Add(new Word(Dictionaries.Swedish.ToString(), "Word", "Word"));
IQueryable<Word> WordQueryable = Words.AsQueryable<Word>();
var mock = new Mock<IServiceContext<Word>>();
mock.Setup(x => x.QueryableEntities).Returns(WordQueryable);
DictionaryRepository dr = new DictionaryRepository(Models.Dictionaries.Swedish, "testdictionaries");
dr.Context = mock.Object;
Word result = dr.GetWord(expected.Text, false);
Assert.AreEqual(expected, result);
}
IServiceContect इंटरफ़ेस
public interface IServiceContext<TEntity>
{
IQueryable<TEntity> QueryableEntities {get;}
}
ServiceContext कक्षा
public class ServiceContext<TEntity> : TableServiceContext, IServiceContext<TEntity> where TEntity : TableServiceEntity
{
private readonly string tableName;
public ServiceContext(CloudStorageAccount account, String tableName)
: base(account.TableEndpoint.ToString(), account.Credentials)
{
this.tableName = tableName;
this.IgnoreResourceNotFoundException = true;
}
public IQueryable<TEntity> QueryableEntities
{
get
{
return CreateQuery<TEntity>(tableName);
}
}
}
शब्दकोश भंडार
public class DictionaryRepository : IDictionaryRepository
{
public Dictionaries Dictionary { get; set; }
public String TableName;
public IServiceContext<Word> Context;
public DictionaryRepository(Dictionaries dictionary)
: this(dictionary, "dictionaries")
{
}
public DictionaryRepository(Dictionaries dictionary, String tableName)
{
Dictionary = dictionary;
this.TableName = tableName;
CloudStorageAccount account = CloudStorageAccount.Parse(***);
Context = new ServiceContext<Word>(account, this.TableName);
}
public List<Tile> GetValidTiles()
{
throw new NotImplementedException();
}
public Type ResolveEntityType(String name)
{
return typeof(Word);
}
public Word GetWord(string word, Boolean useCache = false)
{
var q = this.Context.QueryableEntities.Where(x => x.PartitionKey == Dictionary.ToString() && x.RowKey == word).AsTableServiceQuery();
Word result = q.Execute().SingleOrDefault();
if (result == null)
return null;
return result;
}}
मैं निम्न त्रुटि
त्रुटि हो रही है:
ArgumentNullException was unhandeled by user code
Value cannot be null.
Parameter name: query
जब .AsTableServiceQuery (बुला मैं त्रुटि मिलती है) निम्नलिखित पंक्ति पर DictionaryRepository वर्ग:
var q = this.Context.QueryableEntities.Where(x => x.PartitionKey == Dictionary.ToString() && x.RowKey == word).AsTableServiceQuery();
माइक्रोसॉफ्ट कोड लपेटकर पर विचार करें अपनी खुद की कक्षा में जो एक सरलीकृत इंटरफ़ेस लागू करता है। – TrueWill