Search code examples
c#xunitxunit.net

How to test if variable have streams of byte using xunit in C#


I am newbie to XUnit ,I need to write unit test for a method which generate streams of data (byte[] array) and set it to variable. I need to verify if that variable have data(bytes)

Below is the method

public class SMTPEmailSender : IEmailSender
{
   private IPDFCreater _pdfCreater;
        private ILogger _log;

        public SMTPEmailSender(IPDFCreater pdfCreater, ILogger log)
        {
            _pdfCreater = pdfCreater;
            _log = log;
        }
public Email BuildEmail(string smptpurl, MailDTO mailRequest)
        {
            Email email = null;
            try
            {
                _
                var otp = new PDFData { OTP = mailRequest.OTP, FaxNumber = mailRequest.FaxNumber, FullName = mailRequest.FullName };
                
                
                email = new Email
                {
                    SMTPServerUrl = smptpurl,
                      .
                      .
                    FromAddressDisplayName = mailRequest.FromAddressDisplayName,
                    ContentStream = new MemoryStream(_pdfCreater.GeneratePDF(otp)),// This line calls a method and return byte array (byte[])
                    AttachmentName = mailRequest.FaxFileName

                };
                
            }
            catch (Exception ex)
            {
                
            }

            return email;
        }
}

I have written Unit test , but I'm confused how would I assert whether variable ContentStream have data or not

[Theory]
    [MemberData(nameof(GetFaxAsMailDTO))]
    public void BuildEmailInfo_ReturnsEmailObject(MailDTO faxMailDTO)
    {
        string SmptpUrl = "testurl";
        var result = _smtpEmailSender.BuildEmailI(SmptpUrl, mailDTO);
        // here I want to check the result.ContentStream have bytes of data or not
    }

Solution

  • Check that result contains a ContentStream, then check the length of the stream.

    Something like:

    var result = _smtpEmailSender.BuildEmailI(SmptpUrl, mailDTO);
    Assert.NotNull(result.ContentStream);
    Assert.Equal(expectedContentStreamLength, result.ContentStream.Length);