I am currently writing a unit test to test a "utility" method other methods will use to resolve relational database information (TopicID to TopicName). This information is referenced several places.
Here is what I do know:
- I need to put matching data in the context to be returned upon a request call.
- Try as I might I can't seem to do that. I get a type conversion error or an overload error.
So the big question - how can I get all the information into my mock database? I am using Moq 4, MVC5, and EF6.
The Controller's Utility Method mentioned above
//Use TopicID to look up Topic and Quiz Name - "Utility" method called in various places
//GET: TopicLookup/5
public async Task<Topics> TopicLookup(QuizHeader quizHeader)
{
int id = quizHeader.TopicID;
Task<Topics> getTopicTask = db.Topics.FindAsync(id);
//getTopicTask.Start();
Topics topics = await getTopicTask;
//Don't stop the user from completing the task, but do alert to some problems
ViewBag.TopicName = (topics.TopicName != null) ? "Unable to load topic name" : topics.TopicName;
return topics;
}
The Model involved
[Table("TopicList")]
public class Topics
{
[ForeignKey("LibraryID")]
[HiddenInput(DisplayValue = false)]
[Column("TopicID")]
public int TopicID { get; set; }
[Required(ErrorMessage = "Topic must be set!")]
[Display(Name = "Topic")]
[Column("TopicName")]
public string TopicName { get; set; }
[Display(Name = "Year")]
[Column("TopicYear")]
public int TopicYear { get; set; }
}
The unit test
[TestClass]
public class TopicLookupTest
{
[TestMethod]
public void ConvertToTopic()
{
//Arrange
var controller = new QuizHeaderController();
var header = new Models.QuizHeader();
var server = new Mock<HttpServerUtilityBase>();
var request = new Mock<HttpRequestBase>();
var context = new Mock<HttpContextBase>();
//DbSet<Topics> data;
var data = new Mock<Topics>();
//data.Add(new Topics { TopicID = 1, TopicName = "Test Topic", TopicYear = 2015 });
//data.TopicID = 1;
//data.TopicYear = 2015;
//data.TopicName = "Test Topic";
data.Setup(x => x.TopicID).Returns(1);
data.Setup(x => x.TopicName).Returns("Test Topic");
data.Setup(x => x.TopicYear).Returns(2015);
context.Setup(x => x.Server).Returns(server.Object);
controller.ControllerContext = new ControllerContext(context.Object, new RouteData(), controller);
header.TopicID = 1;
//Action
var result = controller.TopicLookup(header);
//Result
//Writing this later on
}
}
Aucun commentaire:
Enregistrer un commentaire