- Notifications
You must be signed in to change notification settings - Fork 392
Closed
Labels
bugSomething isn't workingSomething isn't workingtenet-coverageIssue related to possible incorrect coverageIssue related to possible incorrect coverage
Description
Hi again)
Code:
namespace CoverletAsync { public class MyService { public async Task<byte[]> GetBytes(Func<Task<bool>> process, Func<Task<MemoryStream>> getStream, Func<ISession> getSession, Func<Stream, ISession, Task<byte[]>> doWithStream) { if (!await process()) { return Array.Empty<byte>(); } using var session = getSession(); await using var stream = await getStream(); return await doWithStream(stream, session); } public interface ISession : IDisposable { } } }
Test:
namespace CoverletAsync.Tests { public class Tests { [Test] public async Task SomeMethodEmpty() { await using var memoryStream = new MemoryStream(); var actual = await new MyService().GetBytes(() => Task.FromResult(false), () => Task.FromResult(memoryStream), () => new TestSession(), (stream, session) => Task.FromResult(new byte[] { 0x01, 0x02 })); CollectionAssert.IsEmpty(actual); } [Test] public async Task SomeMethodNonEmpty() { await using var memoryStream = new MemoryStream(); var actual = await new MyService().GetBytes(() => Task.FromResult(true), () => Task.FromResult(memoryStream), () => new TestSession(), (stream, session) => Task.FromResult(new byte[] { 0x01, 0x02 })); Assert.That(actual, Is.EqualTo(new byte[] { 0x01, 0x02 })); } private class TestSession : MyService.ISession { public void Dispose() { } } } }
Expected:
Full branch coverage
Actual:
Partially covered (1 visits, 2 of 4 branches are covered)
Report:
<?xml version="1.0" encoding="utf-8"?> <coverage line-rate="1" branch-rate="0.75" version="1.9" timestamp="1623166089" lines-covered="8" lines-valid="8" branches-covered="6" branches-valid="8"> <sources> <source>F:\</source> </sources> <packages> <package name="CoverletAsync" line-rate="1" branch-rate="0.75" complexity="8"> <classes> <class name="CoverletAsync.MyService/<GetBytes>d__0" filename="Work\experiments\CoverletAsync\CoverletAsync\MyService.cs" line-rate="1" branch-rate="0.75" complexity="8"> <methods> <method name="MoveNext" signature="()" line-rate="1" branch-rate="0.75" complexity="8"> <lines> <line number="10" hits="2" branch="True" condition-coverage="100% (2/2)"> <conditions> <condition number="16" type="jump" coverage="100%" /> </conditions> </line> <line number="11" hits="2" branch="True" condition-coverage="100% (2/2)"> <conditions> <condition number="146" type="jump" coverage="100%" /> </conditions> </line> <line number="12" hits="1" branch="False" /> <line number="13" hits="1" branch="False" /> <line number="16" hits="1" branch="True" condition-coverage="50% (2/4)"> <conditions> <condition number="181" type="switch" coverage="50%" /> </conditions> </line> <line number="17" hits="1" branch="False" /> <line number="18" hits="1" branch="False" /> <line number="19" hits="2" branch="False" /> </lines> </method> </methods> <lines> <line number="10" hits="2" branch="True" condition-coverage="100% (2/2)"> <conditions> <condition number="16" type="jump" coverage="100%" /> </conditions> </line> <line number="11" hits="2" branch="True" condition-coverage="100% (2/2)"> <conditions> <condition number="146" type="jump" coverage="100%" /> </conditions> </line> <line number="12" hits="1" branch="False" /> <line number="13" hits="1" branch="False" /> <line number="16" hits="1" branch="True" condition-coverage="50% (2/4)"> <conditions> <condition number="181" type="switch" coverage="50%" /> </conditions> </line> <line number="17" hits="1" branch="False" /> <line number="18" hits="1" branch="False" /> <line number="19" hits="2" branch="False" /> </lines> </class> </classes> </package> </packages> </coverage>
Run: dotnet test /p:CollectCoverage=true /p:CoverletOutputFormat=cobertura
Reproduced in .NET Core 3.1, Coverlet 3.0.3 / Coverlet 3.0.4-preview.31.g4902c245c8
Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't workingtenet-coverageIssue related to possible incorrect coverageIssue related to possible incorrect coverage