Closed HaroonSaid closed 2 years ago
Hi @HaroonSaid, I recommend you use an isolation framework like Moq to mock your external dependencies:
Install-Package Moq
You can mock IKSqlDBContext.CreatePullQuery in the following way, it is a little bit more involved, but you can generalize it:
[TestClass]
public class KSqlDbTests
{
[TestMethod]
public async Task GetById()
{
//Arrange
var ksqlDbContextMock = new Mock<IKSqlDBContext>();
var pullQueryMock = new Mock<IPullable<ElasticSearchEvent>>();
var pullQueryProviderMock = new Mock<IPullQueryProvider>();
pullQueryProviderMock.Setup(c => c.CreateQuery<ElasticSearchEvent>(It.IsAny<Expression>()))
.Returns(pullQueryMock.Object);
pullQueryMock.Setup(c => c.Provider)
.Returns(pullQueryProviderMock.Object);
pullQueryMock.Setup(c => c.Expression)
.Returns(Expression.Constant(pullQueryMock.Object));
pullQueryMock.Setup(c => c.GetAsync(It.IsAny<CancellationToken>()))
.ReturnsAsync(new ElasticSearchEvent { Key = 42 });
ksqlDbContextMock.Setup(c => c.CreatePullQuery<ElasticSearchEvent>("EventTopic"))
.Returns(pullQueryMock.Object);
var classUnderTest = new KSqlDb(ksqlDbContextMock.Object);
//Act
var elasticSearchEvent = await classUnderTest.GetById(contextId: 1, id: 12);
//Assert
Assert.AreEqual(42, elasticSearchEvent.Key);
}
}
I also added a push query test example:
https://github.com/tomasfabian/Kafka.DotNet.ksqlDB/wiki/How-to-mock-IKSqlDbContext
Was this useful?
@HaroonSaid have you been able to test your code with mocked IKSqlDBContext as I suggested you?
Can we close the issue (question)?
Yes - thank you
You are welcome.
Hi
I have a very simple class that I want a unit test, do you have any example of how mock
Can you give any guidance on how to mock
IKSqlDBContext
andIPullQuery
?