Files
StructureHelper/StructureHelperTests/UnitTests/BeamShearTests/BeamShearStrengthByStirrupDensityTests.cs
2025-08-10 18:24:46 +05:00

163 lines
7.2 KiB
C#

using Moq;
using NUnit.Framework;
using StructureHelperCommon.Infrastructures.Exceptions;
using StructureHelperCommon.Models;
using StructureHelperLogics.Models.BeamShears;
namespace StructureHelperTests.UnitTests.BeamShearTests
{
[TestFixture]
public class BeamShearStrengthByStirrupDensityTests
{
private Mock<IStirrupEffectiveness> _mockStirrupEffectiveness;
private Mock<IStirrupByDensity> _mockStirrupByDensity;
private Mock<IInclinedSection> _mockInclinedSection;
private Mock<IShiftTraceLogger> _mockTraceLogger;
private StirrupByDensityStrengthLogic _beamShearStrength;
[SetUp]
public void Setup()
{
_mockStirrupEffectiveness = new Mock<IStirrupEffectiveness>();
_mockStirrupByDensity = new Mock<IStirrupByDensity>();
_mockInclinedSection = new Mock<IInclinedSection>();
_mockTraceLogger = new Mock<IShiftTraceLogger>();
_beamShearStrength = new StirrupByDensityStrengthLogic(
_mockStirrupEffectiveness.Object,
_mockStirrupByDensity.Object,
_mockInclinedSection.Object,
_mockTraceLogger.Object
);
}
[TestCase(0.2, 0.48)]
[TestCase(0.5, 1.2)]
[TestCase(1.1, 2.64)]
[TestCase(2.2, 2.64)]
public void GetShearStrength_CalculatesCorrectly_differentStirrupEnd(double stirrupEnd, double expectedStrength)
{
// Arrange
_mockInclinedSection.Setup(s => s.StartCoord).Returns(0);
_mockInclinedSection.Setup(s => s.EndCoord).Returns(100);
_mockInclinedSection.Setup(s => s.EffectiveDepth).Returns(0.55);
_mockStirrupEffectiveness.Setup(s => s.MaxCrackLengthRatio).Returns(2.0);
_mockStirrupEffectiveness.Setup(s => s.StirrupShapeFactor).Returns(0.8);
_mockStirrupEffectiveness.Setup(s => s.StirrupPlacementFactor).Returns(0.75);
_mockStirrupEffectiveness.Setup(s => s.MinimumStirrupRatio).Returns(0.25);
_mockStirrupByDensity.Setup(s => s.StirrupDensity).Returns(4.0);
_mockStirrupByDensity.Setup(s => s.StartCoordinate).Returns(0);
_mockStirrupByDensity.Setup(s => s.EndCoordinate).Returns(stirrupEnd);
// Act
double result = _beamShearStrength.GetShearStrength();
// Assert
Assert.That(result, Is.EqualTo(expectedStrength).Within(1e-6));
_mockTraceLogger.Verify(t => t.AddMessage(It.IsAny<string>(), It.IsAny<TraceLogStatuses>()), Times.AtLeastOnce);
}
[TestCase(0.20, 0.48)]
[TestCase(0.55, 1.32)]
[TestCase(1.1, 2.64)]
[TestCase(2.2, 2.64)]
public void GetShearStrength_CalculatesCorrectly_differentInclinedSectionEnd(double inclinedSectionEnd, double expectedStrength)
{
// Arrange
_mockInclinedSection.Setup(s => s.StartCoord).Returns(0);
_mockInclinedSection.Setup(s => s.EndCoord).Returns(inclinedSectionEnd);
_mockInclinedSection.Setup(s => s.EffectiveDepth).Returns(0.55);
_mockStirrupEffectiveness.Setup(s => s.MaxCrackLengthRatio).Returns(2.0);
_mockStirrupEffectiveness.Setup(s => s.StirrupShapeFactor).Returns(0.8);
_mockStirrupEffectiveness.Setup(s => s.StirrupPlacementFactor).Returns(0.75);
_mockStirrupEffectiveness.Setup(s => s.MinimumStirrupRatio).Returns(0.25);
_mockStirrupByDensity.Setup(s => s.StirrupDensity).Returns(4.0);
_mockStirrupByDensity.Setup(s => s.StartCoordinate).Returns(0);
_mockStirrupByDensity.Setup(s => s.EndCoordinate).Returns(100);
// Act
double result = _beamShearStrength.GetShearStrength();
// Assert
Assert.That(result, Is.EqualTo(expectedStrength).Within(1e-6));
_mockTraceLogger.Verify(t => t.AddMessage(It.IsAny<string>(), It.IsAny<TraceLogStatuses>()), Times.AtLeastOnce);
}
[TestCase(0.2, 0.66)]
[TestCase(0.5, 1.65)]
[TestCase(0.8, 2.64)]
public void GetShearStrength_CalculatesCorrectly_differentShapeFactor(double shapeFactor, double expectedStrength)
{
// Arrange
_mockInclinedSection.Setup(s => s.StartCoord).Returns(0);
_mockInclinedSection.Setup(s => s.EndCoord).Returns(1.1);
_mockInclinedSection.Setup(s => s.EffectiveDepth).Returns(0.55);
_mockStirrupEffectiveness.Setup(s => s.MaxCrackLengthRatio).Returns(2.0);
_mockStirrupEffectiveness.Setup(s => s.StirrupShapeFactor).Returns(shapeFactor);
_mockStirrupEffectiveness.Setup(s => s.StirrupPlacementFactor).Returns(0.75);
_mockStirrupEffectiveness.Setup(s => s.MinimumStirrupRatio).Returns(0.25);
_mockStirrupByDensity.Setup(s => s.StirrupDensity).Returns(4.0);
_mockStirrupByDensity.Setup(s => s.StartCoordinate).Returns(0);
_mockStirrupByDensity.Setup(s => s.EndCoordinate).Returns(100);
// Act
double result = _beamShearStrength.GetShearStrength();
// Assert
Assert.That(result, Is.EqualTo(expectedStrength).Within(1e-6));
_mockTraceLogger.Verify(t => t.AddMessage(It.IsAny<string>(), It.IsAny<TraceLogStatuses>()), Times.AtLeastOnce);
}
[TestCase(0.2, 0.704)]
[TestCase(0.5, 1.76)]
[TestCase(0.8, 2.816)]
public void GetShearStrength_CalculatesCorrectly_differentPlacementFactor(double placementFactor, double expectedStrength)
{
// Arrange
_mockInclinedSection.Setup(s => s.StartCoord).Returns(0);
_mockInclinedSection.Setup(s => s.EndCoord).Returns(1.1);
_mockInclinedSection.Setup(s => s.EffectiveDepth).Returns(0.55);
_mockStirrupEffectiveness.Setup(s => s.MaxCrackLengthRatio).Returns(2.0);
_mockStirrupEffectiveness.Setup(s => s.StirrupShapeFactor).Returns(0.8);
_mockStirrupEffectiveness.Setup(s => s.StirrupPlacementFactor).Returns(placementFactor);
_mockStirrupEffectiveness.Setup(s => s.MinimumStirrupRatio).Returns(0.25);
_mockStirrupByDensity.Setup(s => s.StirrupDensity).Returns(4.0);
_mockStirrupByDensity.Setup(s => s.StartCoordinate).Returns(0);
_mockStirrupByDensity.Setup(s => s.EndCoordinate).Returns(100);
// Act
double result = _beamShearStrength.GetShearStrength();
// Assert
Assert.That(result, Is.EqualTo(expectedStrength).Within(1e-6));
_mockTraceLogger.Verify(t => t.AddMessage(It.IsAny<string>(), It.IsAny<TraceLogStatuses>()), Times.AtLeastOnce);
}
[Test]
public void GetShearStrength_ThrowsException_WhenDependenciesAreNull()
{
// Arrange
var invalidInstance = new StirrupByDensityStrengthLogic(
_mockStirrupEffectiveness.Object,
null, // Invalid
_mockInclinedSection.Object,
_mockTraceLogger.Object
);
// Act & Assert
Assert.Throws<StructureHelperException>(() => invalidInstance.GetShearStrength());
}
}
}